gpt4 book ai didi

c++ - CERN ROOT 的对象所有权和 C++11 智能指针

转载 作者:太空狗 更新时间:2023-10-29 20:58:30 26 4
gpt4 key购买 nike

我试图了解智能指针如何与 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 智能指针吗?

最佳答案

如果您使用TH1::AddDirectory(false),您将管理直方图,然后使用智能指针就不会有问题。

关于c++ - CERN ROOT 的对象所有权和 C++11 智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com