关于“auto_ptr”模板类,这两个来源之间是否存在矛盾

Is there a contradiction between these two sources about the `auto_ptr` template class?

本文关键字:两个 矛盾 存在 是否 之间 ptr auto 关于      更新时间:2023-10-16

此网站声明"所有权、来源和接收器":

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

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

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

ptr != 0的情况下,我看不到运算符释放ptr寻址的对象!

是的,这肯定是后一段代码中的一个错误。ptr指向的对象必须是deleted,然后才能为ptr分配新值,否则ptr最初指向的对象将被泄露。