Как инициализировать объект стека из указателя?

Когда у меня есть указатель на объект, как мне создать переменную без указателя из него?

Моя ситуация такова: у меня есть класс TFile, который загружает файлы. Они могут содержать различные разные именованные объекты. TFile имеет Get метод (возвращение void*), который позволяет мне получить один из этих объектов. Что я обычно делаю, это:

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

Теперь то, что я хотел бы сделать, это иметь возможность объявить TTree tree как не указатель, а инициализировать его из возвращенного указателя. Есть ли способ сделать это (желательно без копирования объекта и без редактирования источника TTree)?

0

Решение

Если вы просто хотите синтаксис не указательного объекта, используйте ссылку:

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

(Обратите внимание, что я заменил приведение в стиле C на static_cast, что не обязательно, но обычно считается хорошим стилем.)

Обратите внимание, однако, что если вам пришлось удалить TTree*, объявив это как TTree& не освободит вас от этой обязанности.

3

Другие решения

Вы можете сделать ссылку на объект, если время жизни объекта достаточно:

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

Обязательно ознакомьтесь с документацией TFile для гарантии того, что объект живет по крайней мере столько же, сколько ваш tree переменная.

2

По вопросам рекламы [email protected]