boost::make_shared
现在已经过时了吗?我在1.35中没有找到它的定义。
std::make_shared
也适用于C++11。请注意,make_shared
不仅仅是一个方便的函数。看一下以下代码片段:
make_shared<foobar>(1, 2);
shared_ptr<foobar>(new foobar(1, 2));
这两个语句都创建了一个 foobar
对象并构造了一个 shared_ptr
。但是,前者避免了为共享计数器分配内存,因为单个内存块将用于计数器和 foobar 对象。而后一种语句不可能做到这一点,因为在构造 shared_ptr
之前会先分配 foobar
的内存。
我的意思是:不,make_shared
不过时,因为它提供了非常有用的优化。
std::make_shared
实际上是对创建对象和创建 std::shared_ptr
的性能优化,因为它只执行一次内存分配而不是两次。 - Seanshared_ptr
的构造函数可能会抛出异常,而由嵌套的new分配的foobar将不会被释放。 - Richard Dally这在1.4文档中有说明:http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/make_shared.html
看起来是在版本1.39中添加的。
今天进行了一些研究,发现 make_shared 实际上是在 1.36.0 中添加的(在 1.35.0 中没有这个头文件),但有趣的是,在 What's new 中没有单独提到这个更改 - 至少我没有找到。