Найти в Дзене
Q-ANSWER.RU

C ++ Destructor вызвал не тот объект?

Я новичок в C ++, и я написал небольшую программу, чтобы узнать, как назначение работает с объектами. Мне было предложено сделать это из документации cpp на этой странице ( http: //www.cplusplus .com / DOC / учебник / classes2 / ). На этой странице говорится: Неявная версия [оператора назначения копирования] выполняет поверхностное копирование, которое подходит для многих классов, но не для классов с указателями на объекты, которые они обрабатывают в своем хранилище. В этом случае не только класс подвергается риску удаления указанного объекта дважды, но назначение создает утечки памяти, не удаляя объект, указанный объектом до назначения . Последняя часть, которую я выделил жирным шрифтом, - это то, почему я решил проверить вещи. Я думал, что эта проблема может быть решена путем обработки удаления указанных объектов в деструкторе (что является стандартным?), Вместо того, чтобы перегружать оператор присваивания копии. Если деструктор не вызывается, разве это не неудобно? Скажем, у меня


Я новичок в C ++, и я написал небольшую программу, чтобы узнать, как назначение работает с объектами. Мне было предложено сделать это из документации cpp на этой странице ( http: //www.cplusplus .com / DOC / учебник / classes2 / ). На этой странице говорится:

Неявная версия [оператора назначения копирования] выполняет поверхностное копирование, которое подходит для многих классов, но не для классов с указателями на объекты, которые они обрабатывают в своем хранилище. В этом случае не только класс подвергается риску удаления указанного объекта дважды, но назначение создает утечки памяти, не удаляя объект, указанный объектом до назначения .

Последняя часть, которую я выделил жирным шрифтом, - это то, почему я решил проверить вещи. Я думал, что эта проблема может быть решена путем обработки удаления указанных объектов в деструкторе (что является стандартным?), Вместо того, чтобы перегружать оператор присваивания копии. Если деструктор не вызывается, разве это не неудобно? Скажем, у меня было несколько ссылочных объектов, я должен был бы поместить все удаления как в деструктор (для большинства случаев перераспределения), так и в перегрузку присваивания.

http://q-answer.ru/questions/c-destructor-vyzval-ne-tot-ob-ekt-53315.html