gpt4 book ai didi

c++ - boost shared_ptr : difference between operator= and reset?

转载 作者:可可西里 更新时间:2023-11-01 15:02:49 25 4
gpt4 key购买 nike

下面两段代码有区别吗?它们中的任何一个比另一个更可取吗?

运算符=

boost::shared_ptr<Blah> foo; // foo.ptr should be NULL
foo = boost::shared_ptr<Blah>(new Blah()); // Involves creation and copy of a shared_ptr?

重置

boost::shared_ptr<Blah> foo; // foo.ptr should be NULL
foo.reset(new Blah()); // foo.ptr should point now to a new Blah object

注意:我需要定义 shared_ptr 然后将其设置在不同的行中,因为我在一段代码中使用它,例如:

boost::shared_ptr<Blah> foo;
try
{
foo.reset...
}
foo...

最佳答案

operator= 将一个 shared_ptr 分配给一个 shared_ptr,而 reset 则生成一个 shared_ptr 获取一个指针的所有权。因此,基本上您发布的示例之间没有区别。也就是说,您不应该选择它们,而只使用 make_shared :

foo = boost::make_shared<Blah>();

此外,如果可能,您可以通过将 try-catch block 包装在一个单独的函数中来避免在没有初始化的情况下声明 shared_ptr,该函数只返回一个 shared_ptr 到新创建的对象:

boost::shared_ptr<Blah> createBlah() {
try {
// do stuff
return newBlah;
}
catch ...
}

关于c++ - boost shared_ptr : difference between operator= and reset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5351823/

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