将make_shared与char []或int []一起使用

时间:2017-08-17 22:49:28

标签: c++ arrays pointers shared

你能否告诉我这是否适用于VS2015?

shared_ptr< char> buffer( make_shared< array< char,10>>() , [] (char *p){delete[] p; } );

shared_ptr< char> buffer( make_shared< array< int,10>>() ,default_delete< int[]>());

1 个答案:

答案 0 :(得分:0)

Visual Studio 2015不支持C ++ 17标准。在C ++ 17标准之前,您不能拥有std::shared_ptr<T[]>指针。但即使在C ++ 17中,std::make_shared函数也不支持数组类型,因此您必须使用boost::make_shared。另一种方法是将唯一指针与支持数组类型的std::make_unique结合使用。如史考迈尔斯在他的“有效性”中指出的那样,这可能不是一个好主意 现代C ++“书:

  

数组的std :: unique_ptr的存在应该是唯一的   对你有兴趣,因为std :: array,std :: vector和   std :: string几乎总是比数据结构选择更好   原始数组。