LINUX.ORG.RU

размещение при помощи new в С++


0

1

заклинило... положим пример:

char* buff = new[sizeof(MyClass)] char();
MyClass* ptr = new(buff) MyClass(....);
теперь вопрос: надо ли вызывать delete ptr и если да то что этот delete удалит? Деструктор он для MyClass конечно вызовет, но вот удалит он что не buff ли?



Последнее исправление: mskmsk1985 (всего исправлений: 1)
Ответ на: комментарий от aho

руками вызываешь деструктор и освобождаешь оригинальный буфер

Именно. И только так.

Pavval ★★★★★
()
Ответ на: комментарий от Bad_ptr

> А нельзя delete MyClass, а потом delete[] buff?

нет, будет попытка два раза освободить один и тот участок памяти и крэш

aho
()

> char* buff = new[sizeof(MyClass)] char();

Что?! Может new char[sizeof(MyClass)]?

надо ли вызывать delete ptr

delete ptr вызывать нельзя.

Деструктор он для MyClass конечно вызовет, но вот удалит он что не buff ли?

Undefined behavior, точка.

Пишите на быдлоне или быдляве чтоли.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.