gpt4 book ai didi

c++ - 试图理解 auto_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:45 24 4
gpt4 key购买 nike

我试图了解有关 auto_ptr 类如何工作的某些细节。假设您有以下类(class)(我是在一个网站上找到的,该网站上有人解释了赋值运算符的要点)。

class TFoo : public TSuperFoo {
auto_ptr<TBar> fBar1;
auto_ptr<TBar> fBar2;
public:
TFoo& TFoo::operator=(const TFoo& that);
// various other method definitions go here...
}

现在是赋值运算符的实现。

TFoo& TFoo::operator=(const TFoo& that)
{
if (this != &that) {
auto_ptr<TBar> bar1 = new TBar(*that.fBar1);
auto_ptr<TBar> bar2 = new TBar(*that.fBar2);

fBar1 = bar1;
fBar2 = bar2;
}
return *this;
}

他接着说

Here, if the second new operation fails, the first new TBar will be deleted by auto_ptr's destructor when we exit the function. But if both new's succeed, the assignments will delete the objects fBar1 and fBar2 previously pointed to, and will also zero out bar1 and bar2 so that their destructors don't delete anything when we exit the function.

所以我的问题是为什么 bar1 和 bar2 会被清零?什么会触发它?难道你不必做类似的事情

fBar = bar1.release();

感谢您对此的任何帮助。

最佳答案

auto_ptr 的赋值运算符将对象的所有权转移给受让人,有效地释放了从中分配对象的 auto_ptr。因此,赋值运算符的语义是相当违反直觉的。这可能是 auto_ptr 被弃用并应被替换为 unique_ptr 的主要原因。

关于c++ - 试图理解 auto_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com