2015-04-21 3 views
2

У меня есть некоторый код:Как правильно очистить память?

MemoryManager mm; 
char *a = new (mm) char [len +1]; 

Как я могу освободить всю память по указателю а?

+2

Что вы пытаетесь сделать? И нет необходимости «удалять» память, на которую указывает 'a' (если это то, что вы подразумеваете под * бесплатным *) – Praetorian

+0

Как @Praetorian, вам не нужна свободная память, потому что вы не выделили память. – gomons

+4

Что такое 'MemoryManager'? – Eric

ответ

3

Во-первых, нет никакого способа, чтобы что-либо встроенное могло знать, как удалить ваши данные 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 часто задаваемых вопросов.

+0

Может ли кто-нибудь объяснить этот пример более подробно? – gomons

+0

@gomons: они создают 'char []', используя пользовательский менеджер памяти. Они хотят сообщить диспетчеру памяти очистить память. – Eric

+0

Итак, 'char * a = new (mm) char [len +1];' вызывает 'operator new()' перегружен в 'MemoryManager'? – gomons

Смежные вопросы