如果您的类具有在标头中定义的私有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之间的区别。
答案 0 :(得分:2)
这是最好的
testint = std::make_shared<int>(12);
必须要坚持:
std::shared_ptr<int> testInt(new int(12));
原因是它避免了额外的副本,并且在一种情况下可能会泄漏:
如果控制块的分配(跟踪引用计数)失败(在库代码中)并抛出,则会在用户代码中使用new分配int的内存泄漏。