关于`auto_ptr`模板类这两个来源之间是否存在矛盾?

Bel*_*loc 8 c++ auto-ptr

网站声明" 所有权,来源和汇 ":

"当你复制一个auto_ptr,你自动将所有权从源转移auto_ptr到目标auto_ptr; 如果目标auto_ptr已经拥有一个对象,那么该对象首先被释放.在复制之后,只有目标auto_ptr拥有指针并在适当的时候删除它,而源被设置回null状态,不能再用于引用拥有的对象."

现在考虑的定义operator=()templacte<classX> class auto_ptr,在Stroustrup的第14章,368页的C++编程语言第三版:

auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }

我无法看到操作员释放所解决的对象ptr,万一ptr != 0!

sha*_*oth 4

是的,这绝对是后一段代码中的错误。在将新值赋给 之前,ptr必须先删除by 所指向的对象,否则原来所指向的对象将被泄漏。deleteptrptr