Вот это место я и просил прояснить. Покажи код, который не работает.
struct iterator {
void* data;
};
vector<vector<iterator>> memory;
Проверь этот код. Где в нем утечка и почему в нем не должен вызываться деструктор?- Евгений Шатунов
Предлагаю просто не утверждать того, в чем ты не убедился лично.
Деструктор — это функция-член, которая вызывается автоматически при выходе объекта из области действия или явно уничтожена вызовом deleteот Майкрософт и
member function may only be called with a pointer to a complete typeот cppreference в случае деструктора для std::shared_ptr
vector<shared_ptr<void>>
? Ну может я не настолько хорошо понимаю разницу в утечке памяти и ресурса, но она есть. И то, что если я начну использовать такую конструкцию, не позволит мне избежать утечки.(string*)ptr
- это каст. Из void* в string*. Если использовать твою идею то это в каждом dll надо писать функцию с кучей кастов. Напримерswitch(type):
case 0:
delete (int*)ptr;
return true;
default:
return false;
void string_destructor(void* ptr)
{
delete (string*)ptr;
}
. В новом загруженном модуле не string, а class smclss и указатель smclss*. Это можно решить тем, что каст всех указателей идет в модуле, это означает писать кучу кастов в каждом модуле. По-другому нельзя?
using namespace tokenoperator::dte_token::stream;
не работает? И оно выдает другую функцию?