0

オブジェクトへのポインターがある場合、それから非ポインター変数を作成するにはどうすればよいですか?

私の状況は次のとおりです。ファイルをロードする TFile クラスがあります。これらには、さまざまな名前の付いたオブジェクトを含めることができます。TFile には、これらのオブジェクトの 1 つを取得できる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"));

(C スタイルのキャストを に置き換えたことに注意してくださいstatic_cast。これは必須ではありませんが、通常は適切なスタイルと見なされます。)

ただし、 を削除しなければならない場合は、TTree*として宣言しても、TTree&この義務から解放されないことに注意してください。

于 2013-09-28T11:31:06.373 に答える
2

オブジェクトの有効期間が十分であれば、オブジェクトへの参照を作成できます。

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

オブジェクトが少なくとも変数TFileと同じくらい存続することを保証するために、のドキュメントを確認してください。tree

于 2013-09-28T11:31:37.327 に答える