Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

Можно ли сделать так, чтобы объект класса создавался только путём выделения памяти в куче, а не на стеке?

MyClass o; // error MyClass * o = new MyClass; // ok


Ответ

Конечно, можно. Закройте его деструктор (сделайте его private).
Чтобы удалить выделенный динамически объект, вам придется написать отдельную функцию - например, друга или статический член - для удаления, вроде
friend void destroy(MyClass* t) { delete t; }
... MyClass * o = new MyClass;
... destroy(o);

Комментариев нет:

Отправить комментарий