c++ - 通过智能指针重置对象

标签 c++ pointers smart-pointers

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

typedef boost::shared_ptr<Object> PObject;

int main()
{
    PObject SomeObject;

    SomeObject = PObject(new Object);
    // some code
    *SomeObject = Object();
}

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

最佳答案

当使用 shared_ptr 时,您可以为此使用 reset 方法:

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"

关于c++ - 通过智能指针重置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579897/

相关文章:

c++ - 使用 Visual Studio 10 编译 x64 EMMS

c - 将值添加到结构数组会导致段错误

c++ - 是否可以在 C++ 中动态分配临时变量?

c - 使用 C++11 智能指针作为 C 函数参数

c++ - 如何找出发生浮点异常的位置?

c++ - 在 C++ 中使用类似 Fortran 的格式迭代文本文件

.net - 需要让电脑和手机通话

c++ - Strtok_r() 并移动保存指针

c++ - 类的 cout 中的内存地址而不是值

c++ - 智能指针、typedef 和前向声明