c – boost:初始化共享指针重置vs make_shared

除了生成代码的大小之外,使用reset()在函数make_shared()上初始化共享指针有什么区别?

案例1使用reset()

boost::shared_ptr<A> pA;
pA.reset(new A());

案例2使用make_shared()

boost::shared_ptr<A> pA;
pA = boost::make_shared<A>();

一般来说,使用reset over make_shared减少可执行文件的大小是一个好习惯吗?

解决方法

reset(new T(…))分配堆块,构造对象,为引用计数器分配新的堆块并初始化引用计数器.

make_shared< T>(…)分配比对象所需的稍大的堆块,并在同一堆块中构造对象和引用计数器.

make_shared()运行得更快并且需要更少内存的可能性很高.

但是,如果您使用的是像Microsoft Visual Studio这样的IDE,则存在一个小缺点:Intellisense无法向您显示构造函数中使用的参数的名称.代码工作正常,但编辑make_shared()调用很不舒服.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...