C++ 初始化boost::shared\u ptr的正确方法
我刚刚开始使用C++ 初始化boost::shared\u ptr的正确方法,c++,boost,initialization,shared-ptr,C++,Boost,Initialization,Shared Ptr,我刚刚开始使用boost::shared_ptr,所以我四处搜索,发现有几种方法可以初始化它: boost::shared_ptr<MyClass> myclass = boost::shared_ptr<MyClass>(new MyClass()); boost::shared_ptr<MyClass> myclass = new MyClass(); boost::shared_ptr<MyClass> myclass = boost::ma
boost::shared_ptr
,所以我四处搜索,发现有几种方法可以初始化它:
boost::shared_ptr<MyClass> myclass = boost::shared_ptr<MyClass>(new MyClass());
boost::shared_ptr<MyClass> myclass = new MyClass();
boost::shared_ptr<MyClass> myclass = boost::make_shared<MyClass>();
boost::shared_ptr myclass=boost::shared_ptr(new myclass());
boost::shared_ptr myclass=new myclass();
boost::shared_ptr myclass=boost::make_shared();
以及分配:
boost::shared_ptr<MyClass> someOtherType::getMyClass();
boost::shared_ptr<MyClass> myclass = someOtherTypePointer->getMyClass();
boost::shared_ptr<MyClass> myclass = boost::make_shared<MyClass>(someOtherTypePointer->getMyClass());
boost::shared_ptr someOtherType::getMyClass();
boost::shared_ptr myclass=someOtherTypePointer->getMyClass();
boost::shared_ptr myclass=boost::make_shared(someOtherTypePointer->getMyClass());
哪种方式是init/assign的首选方式?为什么
谢谢。(1)boost::shared_ptr c(boost::shared_ptr(new MyClass());
(1) boost::shared_ptr<MyClass> c(boost::shared_ptr<MyClass>(new MyClass()));
(2) boost::shared_ptr<MyClass> c(new MyClass());
(3) boost::shared_ptr<MyClass> c(boost::make_shared<MyClass>());
(2) boost::shared_ptr c(新的MyClass());
(3) boost::shared_ptr c(boost::make_shared());
第一个是不必要的复杂
(2) 和(3)看起来类似,但只要有可能(即不需要自定义删除程序时),就使用make_shared
)
共享
:
- 它的效率更高。它通常为
对象和MyClass
的控制块分配内存,只分配一个内存。相反,(2)执行至少两次内存分配。因此shared\u ptr
减少了分配开销、内存碎片并改进了局部性(参见第2点)make_shared
- 避免显式的
(并且,至少在使用C++11时,它更清晰:new
)autoC(std::make_shared());
boost::shared_ptr
以共享同一对象的所有权时
如果您需要获得原始指针的所有权,您应该使用
reset
()。您应该更正示例:class
是保留关键字:您的赋值示例不是真正的赋值(它是副本初始化)