0
, когда класс имеет частный деструктор, могут быть созданы только динамические объекты этого класса. Зачем?C++: Почему мы не можем вызвать частный деструктор по локальной переменной?
, когда класс имеет частный деструктор, могут быть созданы только динамические объекты этого класса. Зачем?C++: Почему мы не можем вызвать частный деструктор по локальной переменной?
Когда локальная переменная выходит за пределы области видимости, существует неявный вызов деструктора.
Если деструктор недоступен из этой области действия, его нельзя вызвать.
#include using namespace std; класс Тест { частный: ~ Test() {} }; int main() { Тест * t = новый тест; delete t; } Эта программа не скомпилирована. Если я хочу удалить объект (локальная переменная), прежде чем он завершит выполнение exec, то? –
0726
@ 0726: Вы не можете. Деструктор похож на любую функцию-член: если он является закрытым, то его может вызвать только член этого класса (или член класса друзей). Период. Как правило, у такого класса с частным деструктором есть какой-то другой метод для удаления объекта или, по крайней мере, для его обозначения, поскольку он больше не используется для какого-то механизма сбора мусора. –
Я не уверен, какая часть этого не очевидна для вас. Если деструктор недоступен, вы не можете уничтожить объект. Если уничтожение произойдет автоматически для локальной переменной в контексте, где деструктор недоступен, вы не можете использовать его в качестве локальной переменной. Если разрушение произойдет, потому что вы удалите его в контексте, где деструктор недоступен, вы не можете его удалить. –