2016-04-15 3 views

ответ

1

Когда локальная переменная выходит за пределы области видимости, существует неявный вызов деструктора.

Если деструктор недоступен из этой области действия, его нельзя вызвать.

+0

#include using namespace std; класс Тест { частный: ~ Test() {} }; int main() { Тест * t = новый тест; delete t; } Эта программа не скомпилирована. Если я хочу удалить объект (локальная переменная), прежде чем он завершит выполнение exec, то? – 0726

+1

@ 0726: Вы не можете. Деструктор похож на любую функцию-член: если он является закрытым, то его может вызвать только член этого класса (или член класса друзей). Период. Как правило, у такого класса с частным деструктором есть какой-то другой метод для удаления объекта или, по крайней мере, для его обозначения, поскольку он больше не используется для какого-то механизма сбора мусора. –

+0

Я не уверен, какая часть этого не очевидна для вас. Если деструктор недоступен, вы не можете уничтожить объект. Если уничтожение произойдет автоматически для локальной переменной в контексте, где деструктор недоступен, вы не можете использовать его в качестве локальной переменной. Если разрушение произойдет, потому что вы удалите его в контексте, где деструктор недоступен, вы не можете его удалить. –