C ++, пустой деструктор для класса

Я прочитал один из ваших ответов (Будет ли «пустой» конструктор или деструктор делать то же самое, что и сгенерированный?). Вы написали:
«Давайте предположим, что объект типа C создан в определении конструктора A в файле .cpp, который также содержит определение struct C. Теперь, если вы используете struct A и требует уничтожения объекта A, компилятор предоставить неявное определение деструктора, как в случае выше. Этот деструктор также неявно вызовет деструктор объекта auto_ptr. И это удалит содержащийся в нем указатель, который указывает на объект C — без знания определения C ! Это появилось в файле .cpp, где определен конструктор структуры A «. Не могли бы вы объяснить мне две вещи:
1. почему деструктор А должен знать определение С?
2. Как добавление пустого деструктора А помогает ситации?
Спасибо

2

Решение

1) Деструктор A должен знать, как уничтожить C поскольку A может содержать auto_ptr в C, auto_ptrожидается, что объекты умрут, когда вмещающий объект умрет. Следовательно, деструктор A должен знать, как уничтожить C,

2) Ключ в том, что определение деструктора записывается только в файл .cpp. Это означает, что вызовы деструктора связаны с объектом, скомпилированным из файла .cpp. Когда файл .cpp компилируется, он получает доступ к определению C (это то, что было написано в ответе). Следовательно, деструктор в файле .cpp может разрушать C по мере необходимости, вместо того, чтобы не разрушать C, как в случае, когда деструктор не был определен и / или определен в точке, где компилятор видел только прямое объявление class C,

Также см

Связь между Форвардным объявлением и деструкторами

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector