考虑下面的示例代码:我是否应该在类构造函数内部或外部初始化shared_ptr?
#include <memory>
class Foo {
public:
Foo(std::shared_ptr<int> p);
private:
std::shared_ptr<int> ptr;
};
Foo::Foo(std::shared_ptr<int> p) : ptr(std::move(p)) {
}
class Bar {
public:
Bar(int &p);
private:
std::shared_ptr<int> ptr;
};
Bar::Bar(int &p) : ptr(std::make_shared<int>(p)) {
}
int main() {
Foo foo(std::make_shared<int>(int(256)));
Bar bar(*new int(512));
return 0;
}
两个Foo和Bar正常工作。但是,在调用构造函数时创建shared_ptr,然后将所有权与std :: move一起传递,并仅将对象的引用传递给对象并将shared_ptr的创建委托给类构造函数,是否有任何区别?
我认为第二种方式更好,因为我不必移动指针。但是,我主要看到了我正在阅读的代码中使用的第一种方式。
我应该使用哪一个,为什么?
我更喜欢用'std :: make_shared'进行直接初始化。如果'new'抛出一个确定的内存泄漏。 –
代码泄漏内存,这两件事情完全不同 –