我想了解智能指针如何与ROOT对象所有权方案共存。我不用走太远就可以找到答案,看看这个:
#include <iostream>
#include <memory>
#include "TH1F.h"
#include "TFile.h"
int main()
{
TFile f("out.root", "recreate");
f.cd();
std::unique_ptr<TH1F> h {new TH1F("h", "h", 100, -5, 5)};
h->FillRandom("gaus", 10000);
h->Write();
f.Close();
return 0;
}
由一个独特指针处理的直方图由当前的gDirectory所拥有。因为我在退出程序前礼貌地关闭了文件,所以这个直方图已经被ROOT内存管理器销毁了。现在在main()结束时,我的指针超出了范围,它的资源需要被释放,但它已经被释放了!我没有找到任何关于ROOT对象所有权/内存管理如何与C++11智能指针一起使用的资源。我的问题是,你是否在打开ROOT对象管理的代码中使用智能指针?你是否在你的HNEP实验中使用C++11的智能指针?