в? класс A
, нет абсолютно никаких причин для .clear()
vector
-тип переменной-элемента в деструкторе. Деструктор vector
будет .clear()
vector
, когда он называется.
В классе B
, код очистки просто можно записать в виде:
delete p_;
Там нет необходимости, чтобы проверить, является ли p_ != NULL
первым, потому что delete NULL;
определяется не быть не оп. Также нет необходимости устанавливать p_ = NULL
после того, как у вас есть delete
d, потому что p_
не может быть законно доступным после того, как объект, из которого он является членом, будет уничтожен.
Тем не менее, вам редко приходится использовать delete
в коде C++. Вы должны предпочесть использовать управление ресурсами с ограничением видимости (SBRM, также называемое инициализацией приобретения ресурсов) для автоматического управления сроками ресурса ресурсов.
В этом случае вы можете использовать интеллектуальный указатель. boost::scoped_ptr
и std::unique_ptr
(от C++ 0x) являются хорошим выбором. Ни один из них не должен иметь накладных расходов по сравнению с использованием необработанного указателя. Кроме того, они обе подавляют генерацию неявно объявленного конструктора копирования и оператора присваивания копий, который обычно вы хотите, когда у вас есть переменная-член, которая является указателем на динамически выделенный объект.
Привет, Майкл, вы должны попробовать очистить свой титул. Тогда вы получите больше ответов. –
Micheal FTFY. Если вы чувствуете, что мое редактирование было плохим, не стесняйтесь возвращаться. –