【发布时间】:2012-02-20 11:56:22
【问题描述】:
site 声明“所有权、来源和汇”:
“当您复制auto_ptr 时,您会自动将所有权从源auto_ptr 转移到目标auto_ptr;如果目标auto_ptr 已经拥有一个对象,则首先释放该对象。复制后,只有目标auto_ptr拥有指针,并在适当的时候将其删除,而源被设置回空状态,不能再用于引用拥有的对象。".
现在考虑templacte<classX> class auto_ptr 的operator=() 的定义,在 Stroustrup 的C++ 编程语言第三版的第 14 章第 368 页:
auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
我看不到操作员释放ptr 寻址的对象,以防ptr != 0 !
【问题讨论】:
-
还有一些可疑的地方:
operator=没有返回任何东西。 -
@sbi C++ 编程语言第三版
-
ptr的类型是什么?是classX*还是auto_ptr_guts<classX>?如果是后者,上面的代码就很简单了。