我试图了解智能指针如何与 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 对象管理的代码中使用智能指针?您在 HENP 实验中使用 C++11 智能指针吗?