8

网站在“所有权、来源和汇”上声明:

“当你复制一个auto_ptr时,你会自动将所有权从源转移auto_ptr到目标auto_ptr如果目标auto_ptr已经拥有一个对象,则该对象首先被释放。复制后,只有目标auto_ptr拥有指针并在适当的时候将其删除,而源被设置回空状态,不能再用于引用拥有的对象。”。

现在考虑Stroustrup 的The C++ Programming Language Third Edition的第 14 章第 368 页中operator=()的定义:templacte<classX> class auto_ptr

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

我看不到操作员释放由 寻址的对象ptr,以防万一ptr != 0

4

1 回答 1

4

是的,这绝对是后一段代码中的一个错误。指向的对象ptr必须是deleted 才能赋予新的值ptr,否则原来指向的对象ptr会被泄露。

于 2012-02-20T12:01:43.347 回答