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();
}
我觉得这不是正确的做法.有人能告诉我最好的方法吗?我只是想知道如何重建/重新初始化一个对象.谢谢!
使用a时shared_ptr,可以使用reset-method:
SomeObject.reset(new Object);
或者,异常安全的替代方案(您也应该用于初始化):
SomeObject = make_shared<Object>();
这两个陈述都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"