我正在尝试将shared_ptr用于我的班级但由于某种原因我得到了段错误。也许我做的事情很愚蠢。
#include <tr1/memory>
#include <iostream>
class Dataset ;
typedef int DataClass;
class Dataset_Impl{
friend class Dataset ;
DataClass *dc;
Dataset_Impl(){dc = new DataClass[10];}
public:
void getSubset(Dataset_Impl* &dObj){
dObj = new Dataset_Impl(); //Causing segfault when using shared_ptr
/*copy subset of 'dc' to dObj->dc and return*/std::cout<<"Copied subset";
}
};
class Dataset{
Dataset_Impl *d;
public:
Dataset (){};
inline void const getSubset(Dataset &dObj) const{d->getSubset(dObj.d);}
};
int main(){
Dataset m1,subset1;std::shared_ptr<Dataset> subset2;
m1.getSubset(subset1);
m1.getSubset((*subset2)); //Causing segfault
}
答案 0 :(得分:7)
您尚未创建对象; subset2
是一个空指针。您需要创建一个对象来进行管理:
std::shared_ptr<Dataset> subset2(new Dataset);
答案 1 :(得分:5)
有关信息,在您的情况下,有一个专用函数可以在新分配的对象上创建shared_ptr
:
std::make_shared<Dataset>()
这将调用Dataset()
构造函数。如果你有第二个构造函数,让我们说Dataset(int)
,你可以用整数i写std::make_shared<Dataset>(i)
。
答案 2 :(得分:3)
您的shared_ptr为空。它不存储指向数据集的指针。 使用例如
std::shared_ptr<Dataset> subset2(new Dataset) ;
答案 3 :(得分:1)
您没有为shared_ptr变量创建对象并尝试访问指针的成员变量。试试
std::shared_ptr<Dataset> subset2(new Dataset())