rtu*_*ado 11 c++ boost shared-ptr
以下两段代码之间是否有任何差异?他们中的任何一个比另一个更好吗?
运算符=
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?
Run Code Online (Sandbox Code Playgroud)
重启
boost::shared_ptr<Blah> foo; // foo.ptr should be NULL
foo.reset(new Blah()); // foo.ptr should point now to a new Blah object
Run Code Online (Sandbox Code Playgroud)
注意:我需要定义shared_ptr然后将其设置在不同的行中,因为我在一段代码中使用它,如:
boost::shared_ptr<Blah> foo;
try
{
foo.reset...
}
foo...
Run Code Online (Sandbox Code Playgroud)
Bjö*_*lex 15
operator=分配shared_ptr到一个shared_ptr,而reset使得shared_ptr指针的取得所有权.所以,基本上你发布的例子没有区别.也就是说,你不应该更喜欢它们而只是使用make_shared:
foo = boost::make_shared<Blah>();
Run Code Online (Sandbox Code Playgroud)
此外,如果可能,您可以shared_ptr通过将try-catch块包装在一个单独的函数中来阻止必须声明a 而不进行初始化,该函数只返回一个shared_ptr新创建的对象:
boost::shared_ptr<Blah> createBlah() {
try {
// do stuff
return newBlah;
}
catch ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13741 次 |
| 最近记录: |