Когда у меня есть указатель на объект, как мне создать переменную без указателя из него?
Моя ситуация такова: у меня есть класс TFile, который загружает файлы. Они могут содержать различные разные именованные объекты. TFile имеет Get
метод (возвращение void*
), который позволяет мне получить один из этих объектов. Что я обычно делаю, это:
TFile file("filename", "READ");
TTree* tree = (TTree*) file.Get("treename");
Теперь то, что я хотел бы сделать, это иметь возможность объявить TTree tree
как не указатель, а инициализировать его из возвращенного указателя. Есть ли способ сделать это (желательно без копирования объекта и без редактирования источника TTree
)?
Если вы просто хотите синтаксис не указательного объекта, используйте ссылку:
TTree& tree = *static_cast<TTree*>(file.Get("treename"));
(Обратите внимание, что я заменил приведение в стиле C на static_cast
, что не обязательно, но обычно считается хорошим стилем.)
Обратите внимание, однако, что если вам пришлось удалить TTree*
, объявив это как TTree&
не освободит вас от этой обязанности.
Вы можете сделать ссылку на объект, если время жизни объекта достаточно:
Tree & tree = *static_cast<TTree*>(file.Get("treename"));
Обязательно ознакомьтесь с документацией TFile
для гарантии того, что объект живет по крайней мере столько же, сколько ваш tree
переменная.