微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()调用很不舒服.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐