C ++ и деструкторы (вложенные классы и общие вопросы) - PullRequest
1 голос
/ 26 января 2012

Я работаю над реализацией двоичного дерева в C ++.Я довольно плохо знаком с языком, и хотя я понимаю, что такое структуры и деструкторы, я не уверен в том, что происходит с вложенными классами / структурами.

В моей реализации у меня есть вложенная структура для моего двоичного узла,Нужна ли этой структуре свой собственный деструктор, или все узлы будут удалены при вызове деструктора для самого двоичного дерева.Меняется ли ответ, если я изменяю структуру на класс?

Кроме того, мне сказали, что если вы когда-либо вызываете «new» в классе, вам нужно вызвать «delete» в деструкторе.Если я инициализирую массив в своем списке инициализации для класса (то есть class: array ({0})), нужно ли мне удалять массив [] в моем деструкторе?

Ответы [ 2 ]

1 голос
/ 26 января 2012

Вложение одного класса (или структуры) в другой не влияет на время жизни объектов.Все, что он делает, это предоставляет область для имени класса и доступ к закрытым членам в классе включения.Таким образом, ваши узлы дерева не будут автоматически уничтожены только благодаря тому, что они вложены в класс дерева.

Если вы хотите, чтобы узлы дерева были уничтожены при уничтожении самого дерева, вам нужно убедиться, что дереводеструктор делает это.Если вы выделяете узлы вручную с помощью new, используйте delete (или delete[]) в деструкторе.В качестве альтернативы, вы можете использовать что-то вроде std::auto_ptr (или std::unique_ptr в C ++ 11), которое выполнит очистку в своем собственном деструкторе, поэтому вам не придется писать вызовы delete самостоятельно.1010 * Изменение структуры на класс не влияет на его поведение во время выполнения.Единственное отличие между структурой и классом в C ++ состоит в том, что тело структуры неявно начинается с public:, а тело класса неявно начинается с private:.

0 голосов
/ 26 января 2012

для C ++ необязательно, чтобы мы определяли деструкторы в нашем классе / структуре. в деструкторе нет никаких изменений, если вы собираетесь изменить структуру на класс. но для языка программирования хорошо, что если мы называем память новым, мы должны удалить ее самостоятельно. если вы собираетесь определить вложенный класс, то в этом классе также полезно создать деструктор.

нет необходимости использовать для удаления [] для массива.

...