интеллектуальный указатель ( отличается между ~ auto_ptr() и release() )

#c

#c

Вопрос:

Я хотел бы знать разницу между ~auto_ptr() и release() функциями.

Это один и тот же метод, или есть различия между уничтожением и освобождением памяти?

Ответ №1:

auto_ptr::release()

Устанавливает внутренний указатель auto_ptr в значение null pointer (что указывает, что он не указывает ни на один объект) без уничтожения объекта, на который в данный момент указывает auto_ptr. Он возвращает значение внутреннего указателя до того, как ему было присвоено значение null. После вызова release() auto_ptr все еще может быть указано на другой объект.

auto_ptr::~auto_ptr()

Освобождает блок памяти, на который объект «указывает», с помощью delete и уничтожает объект. После вызова ~auto_ptr() auto_ptr уничтожается и не должен использоваться в дальнейшем.

Ответ №2:

Эмм … никогда не вызывайте деструктор самостоятельно, только если вы выделили пространство, в котором находится объект, с новым размещением.
Тем не менее, разница в том, что это release допустимо и оставляет объект в допустимом состоянии с возможностью принять другой указатель.
~auto_ptr уничтожит объект и оставит его в недопустимом состоянии, его использование после вызова деструктора является неопределенным поведением.