函数中shared_ptr的初始化

时间:2015-01-02 16:07:48

标签: c++ shared-ptr

如果您的类具有在标头中定义的私有shared_ptr,则如下所示:

class myClass {
public:
  ...
private:
    std::shared_ptr<int> testint;
    void doSomething();
};

稍后在doSomething(在myClass.cpp中)初始化它的最佳方法是什么?

void myClass::doSomething() {
    int i = getNumberFromFile("id.conf");
    testint(new int(i));                 // does not work
    testint.reset(new int(i));           //seems to work, but is this the right way?
    testint = std::make_shared<int>(i); // or is this better
}

Deduplicator:我的问题是当shared_ptr的定义在头文件中时,在类函数中初始化shared_ptr的正确方法是什么。没有使用shared_ptr初始化和make_shared之间的区别。

1 个答案:

答案 0 :(得分:2)

这是最好的

testint = std::make_shared<int>(12);

必须要坚持:

std::shared_ptr<int> testInt(new int(12));

原因是它避免了额外的副本,并且在一种情况下可能会泄漏:

如果控制块的分配(跟踪引用计数)失败(在库代码中)并抛出,则会在用户代码中使用new分配int的内存泄漏。