class Foo{
//some member
public:
int bar;
}
int main(){
char* buffer = new char[100];
Foo* f = new(buffer)Foo();
//do i have to
delete f;
//or is
delete[] buffer;
//enough
}
Конечно, я должен удалить его, если удаление Foo
оказывает существенное влияние на систему, но допустим, что это простой объект хранения, который я помещаю полностью внутри буфера и не имеет деконструктора, который действительно удаляет некоторые другие вещи.
Я читаю: какие-применения-это-там для-размещений-нового и он также говорит
Вы не должны освобождать каждый объект, который использует буфер памяти. Вместо этого вы должны удалить [] только оригинальный буфер.
Правильный способ уничтожить этот объект — явный вызов деструктора:
f-> ~Foo();
Обычно размещение нового используется с памятью в стеке. В данном случае это выделение кучи, поэтому вам нужно освободить буфер, используя форму delete
это соответствует new
,
delete[] buffer;