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

时间:2012-02-20 11:56:23

标签: c++ auto-ptr

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

1 个答案:

答案 0 :(得分:4)

是的,这绝对是后一段代码中的一个错误。在将新值分配给ptr之前,delete指向的对象必须为ptr d,否则ptr最初指向的对象将被泄露。