0

当我有一个指向对象的指针时,如何从中创建一个非指针变量?

我的情况是这样的:我有一个加载文件的 TFile 类。这些可以包含各种不同的命名对象。TFile 有一个Get方法(返回void*),可以让我检索其中一个对象。我通常做的是:

TFile file("filename", "READ");
TTree* tree = (TTree*) file.Get("treename");

现在我想做的是能够声明TTree tree为非指针,并从返回的指针初始化它。有没有办法做到这一点(最好不复制对象,不编辑源TTree)?

4

2 回答 2

3

如果您只想要非指针对象的语法,请使用引用:

TTree& tree = *static_cast<TTree*>(file.Get("treename"));

(请注意,我用 a 替换了 C 风格的演员表static_cast,这不是必需的,但通常被认为是好的风格。)

但是请注意,如果您必须删除TTree*,将其声明为 aTTree&并不能免除您的责任。

于 2013-09-28T11:31:06.373 回答
2

如果对象的生命周期足够,您可以引用该对象:

Tree & tree = *static_cast<TTree*>(file.Get("treename"));

请务必检查文档TFile以确保该对象的寿命至少与您的tree变量一样长。

于 2013-09-28T11:31:37.327 回答