У меня есть некоторый код:Как правильно очистить память?
MemoryManager mm;
char *a = new (mm) char [len +1];
Как я могу освободить всю память по указателю а?
У меня есть некоторый код:Как правильно очистить память?
MemoryManager mm;
char *a = new (mm) char [len +1];
Как я могу освободить всю память по указателю а?
Во-первых, нет никакого способа, чтобы что-либо встроенное могло знать, как удалить ваши данные a
- вы тот, кто выделил его с размещением нового, так что это ваша работа по его очистке.
К сожалению, для этого не существует способа перегрузки delete
. Просто используйте имя метода вашего выбора:
MemoryManager mm;
char *a = new (mm) char [len +1];
mm.cleanup(a); // since mm allocated us the memory, only it knows how to destroy it.
// Note that this also needs to do obj.~ClassName() for class types
'is there a placement delete' Смотрите в isocpp часто задаваемых вопросов.
Может ли кто-нибудь объяснить этот пример более подробно? – gomons
@gomons: они создают 'char []', используя пользовательский менеджер памяти. Они хотят сообщить диспетчеру памяти очистить память. – Eric
Итак, 'char * a = new (mm) char [len +1];' вызывает 'operator new()' перегружен в 'MemoryManager'? – gomons
Что вы пытаетесь сделать? И нет необходимости «удалять» память, на которую указывает 'a' (если это то, что вы подразумеваете под * бесплатным *) – Praetorian
Как @Praetorian, вам не нужна свободная память, потому что вы не выделили память. – gomons
Что такое 'MemoryManager'? – Eric