luc*_*0ni 4 c++ boost shared-ptr
除了生成代码的大小之外,使用reset()初始化函数的共享指针有什么区别make_shared()?
案例1使用reset()
boost::shared_ptr<A> pA;
pA.reset(new A());
Run Code Online (Sandbox Code Playgroud)
案例2使用make_shared()
boost::shared_ptr<A> pA;
pA = boost::make_shared<A>();
Run Code Online (Sandbox Code Playgroud)
一般来说,使用resetover make_shared来减少可执行文件的大小是一个好习惯吗?
And*_* H. 10
reset(new T(...)) 分配堆块,构造对象,为引用计数器分配新的堆块并初始化引用计数器.
make_shared<T>(...) 分配一个稍大于对象所需的堆块,并在同一个堆块中构造对象和引用计数器.
机率很高,make_shared()运行速度更快,内存更少.
但是,如果您使用的是像Microsoft Visual Studio这样的IDE,则存在一个小缺点:Intellisense无法向您显示构造函数中使用的参数的名称.代码工作正常,但编辑make_shared()调用很不舒服.