使用时我一直收到错误:
std::shared_ptr<ModelType> out(new shared_ptr<ModelType>[m_MAX]);
它是否是实例化shared_ptr数组的正确方法? 错误如下:
错误C2664:&#39; void std :: _ Ptr_base&lt; _Ty&gt; :: _ Reset0(_Ty *,std :: _ Ref_count_base *)&#39;:无法从&#39; std :: shared_ptr转换参数1 * &#39;到&#39; ModelType *&#39;
提前致谢
答案 0 :(得分:1)
在C ++ 11和C ++ 14标准中,您不能拥有像std::shared_ptr<T[]>
这样的共享指针的数组类型,因此您无法为数组分配智能指针。你可以做的是从一个指向数组的唯一指针构造一个:
#include <iostream>
#include <memory>
class ModelType{
};
int main(){
const int M_MAX = 123;
std::unique_ptr<ModelType[]> arr(new ModelType[M_MAX]);
std::shared_ptr<ModelType> ptr(std::move(arr));
}
在C ++ 17标准中,可以使用指向数组类型的共享指针,如std::shared_ptr文档中所述,这样您就可以拥有:
std::shared_ptr<ModelType[]> arr(new ModelType[M_MAX]);
Live example。
首选std::make_shared或boost::make_shared 直接使用new
。