boost :: make_shared现在已经过时了吗?

Ste*_*eve 13 c++ boost

现在boost::make_shared已经过时了?还没有在1.35中找到它的定义.

nos*_*sid 27

std::make_shared也可以在C++ 11中获得.请注意,这make_shared不仅仅是一个便利功能.看一下下面的代码片段:

make_shared<foobar>(1, 2);
shared_ptr<foobar>(new foobar(1, 2));
Run Code Online (Sandbox Code Playgroud)

两个语句都创建一个foobar对象并构造一个shared_ptr.但是,前者避免了共享计数器的内存分配,因为单个内存块将用于计数器和foobar对象.对于第二个语句,这是不可能的,因为内存for foobarshared_ptr构造之前被分配.

我想说的是:不,make_shared不是过时的,因为它提供了非常有用的优化.

  • 在C++ 11中,``std :: make_shared``实际上是对创建对象的性能优化,然后创建``std :: shared_ptr``,因为它只执行一次内存分配而不是两次. (8认同)
  • 另一个重要的区别是线程安全.在第二个例子中,`shared_ptr`'ctor可能会抛出,而嵌套new分配的foobar将不会被释放. (2认同)

Rya*_*ook 12

它在1.4文档中:http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/make_shared.html

它似乎已在1.39版本中添加

  • 它甚至是C++ 0x的一部分 (7认同)