如何从指针初始化堆栈对象?

时间:2013-09-28 11:25:48

标签: c++ pointers root-framework

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

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

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

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

2 个答案:

答案 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变量一样长。