ROOT类初始化后成员指针变成野指针的问题
现在对面向对象和面向过程理解的不够透彻,只是希望用面向对象的形式写出一个类,把一套计算工作写成一个类似与工具包的样子。写出一个简易的雏形,大概构造是这样的:
class A: public TObject
{
private:
TH1D* a;
TH2D* b;
TH3D* data;
public:
A();
~A();
void APlus();
... ...
};
成员对象a和b对应要求的两套直方图,在构造函数A()中,从.root文件中读取数据写入data指向的内存,然后通过data来计算ab的BinContent。
在构造函数中应用了这样的语句:
A::A()
{
TFile fdata("xxx.root");
fdata.GetObject("xxx",data);
... ...
}
将.root文件读取到fdata中,再将其中的对象写入data对应的内存。这样的一个类在实例化时就会出现问题:
root[0]: A* a = new A();
root[1]: a.APlus();
*** Break *** segmentation violation
... ...
... ...
这看起来是调用APlus()时,引用了野指针。但是在构造函数中,已经完成了对所有成员指针的初始化,甚至可以直接用Draw()方法将a,b两个对象的直方图画出来,也就是说,