通过智能指针重置对象

Jac*_*oen 2 c++ pointers smart-pointers

我是C++的新手,我想知道重建/重新初始化对象的最佳方法是什么?我的最小代码如下所示:

typedef boost::shared_ptr<Object> PObject;

int main()
{
    PObject SomeObject;

    SomeObject = PObject(new Object);
    // some code
    *SomeObject = Object();
}
Run Code Online (Sandbox Code Playgroud)

我觉得这不是正确的做法.有人能告诉我最好的方法吗?我只是想知道如何重建/重新初始化一个对象.谢谢!

Bjö*_*lex 5

使用a时shared_ptr,可以使用reset-method:

SomeObject.reset(new Object);
Run Code Online (Sandbox Code Playgroud)

或者,异常安全的替代方案(您也应该用于初始化):

SomeObject = make_shared<Object>();
Run Code Online (Sandbox Code Playgroud)

这两个陈述都shared_ptr指向新创建的Object.shared_ptr引用同一对象的其他对象不会受到影响.如果这shared_ptr是唯一指向旧对象的那个,它将被销毁.

为了显示:

shared_ptr<int> foo = make_shared<int>(23);
shared_ptr<int> bar = foo;
std::cout << *foo << ", " << *bar << std::endl; // prints "23, 23"

*foo = 42;
std::cout << *foo << ", " << *bar << std::endl; // prints "42, 42"

bar = make_shared<int>(23);
std::cout << *foo << ", " << *bar << std::endl; // prints "42, 23"
Run Code Online (Sandbox Code Playgroud)