在boost中使用make_shared和allocate_shared?

时间:2015-03-08 17:19:21

标签: c++ boost

我无法理解有关如何使用make_sharedallocate_shared初始化共享数组和指针的boost文档:

shared_ptr<int> p_int(new int); // OK
shared_ptr<int> p_int2 = make_shared<int>(); // OK
shared_ptr<int> p_int3 = allocate_shared(int);  // ??


shared_array<int> sh_arr(new int[30]); // OK
shared_array<int> sh_arr2 = make_shared<int[]>(30); // ??
shared_array<int> sh_arr3 = allocate_shared<int[]>(30); // ??

我正在尝试学习正确的语法来初始化上述变量,注释为// ??

1 个答案:

答案 0 :(得分:3)

allocate_sharedmake_shared一样使用,除了您将分配器作为第一个参数传递。

boost::shared_ptr<int> p_int(new int);
boost::shared_ptr<int> p_int2 = boost::make_shared<int>();

MyAllocator<int> alloc;
boost::shared_ptr<int> p_int3 = boost::allocate_shared<int>(alloc);

make没有boost::shared_array函数,所以唯一的方法就是手动分配内存:

boost::shared_array<int> sh_arr(new int[30]);

但是boost::make_shared等支持数组类型 - 无论是未知大小还是固定大小 - 在这两种情况下都会返回boost::shared_ptr

boost::shared_ptr<int[]> sh_arr2 = boost::make_shared<int[]>(30);
boost::shared_ptr<int[30]> sh_arr3 = boost::make_shared<int[30]>();

请注意,此时std::shared_ptr 支持数组。