当我有一个指向对象的指针时,如何从中创建一个非指针变量?
我的情况是这样的:我有一个加载文件的TFile类。这些可以包含各种不同的命名对象。 TFile有一个Get
方法(返回void*
),可以让我检索其中一个对象。我通常做的是:
TFile file("filename", "READ");
TTree* tree = (TTree*) file.Get("treename");
现在我想做的是能够将TTree tree
声明为非指针,并从返回的指针初始化它。有没有办法这样做(最好不复制对象,而不编辑TTree
的来源)?
答案 0 :(得分:3)
如果您只想要非指针对象的语法,请使用引用:
TTree& tree = *static_cast<TTree*>(file.Get("treename"));
(请注意,我用static_cast
替换了C风格的演员表,这不是必需的,但通常被认为是好的风格。)
但请注意,如果您必须删除TTree*
,则将其声明为TTree&
将无法解除此职责。
答案 1 :(得分:2)
如果对象的生命周期足够,您可以引用该对象:
Tree & tree = *static_cast<TTree*>(file.Get("treename"));
请务必查看TFile
的文档,以确保该对象至少与tree
变量一样长。