此site表示“所有权,来源和接收”:
“当您复制auto_ptr
时,如果目标auto_ptr
已拥有对象,则会自动将所有权从源auto_ptr
转移到目标auto_ptr
; ,该对象首先被释放。复制后,只有目标auto_ptr
拥有指针,并将在适当的时候删除它,而源被设置回空状态,不能再使用引用拥有的对象。“。
现在考虑Stroustrup的 C ++编程语言第三版的第14章第368页中operator=()
的{{1}}的定义:
templacte<classX> class auto_ptr
我无法看到操作员释放auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
所解决的对象,以防ptr
!
答案 0 :(得分:4)
是的,这绝对是后一段代码中的一个错误。在将新值分配给ptr
之前,delete
指向的对象必须为ptr
d,否则ptr
最初指向的对象将被泄露。