外部ライブラリから関数を使用する場合、ポインタをconst参照に「任意に」逆参照するのは安全ですか?(const)参照へのポインタの変換
SomeType const& obj = *LIB_CreateSomething();
これは普遍的な安全/スマートですか?
もっと重要なのは、C++で "frowned"されている生ポインタ以外のconstポインタを使ってこれを行う理由が本当にあるのでしょうか?
外部ライブラリから関数を使用する場合、ポインタをconst参照に「任意に」逆参照するのは安全ですか?(const)参照へのポインタの変換
SomeType const& obj = *LIB_CreateSomething();
これは普遍的な安全/スマートですか?
もっと重要なのは、C++で "frowned"されている生ポインタ以外のconstポインタを使ってこれを行う理由が本当にあるのでしょうか?
これは確かに普遍的に良いアイデアではない、または一般的には良いアイデアです。関数がポインタを返す場合、特にCreateXのようなものを呼び出した場合は、ポインタが指しているものの有効期間を管理する必要があります。これは参照ではできませんが、スマートポインタで行うことができます。
一般的に、参照変数を作成する必要はありません。 C++での参照は、主に関数のパラメータと戻り値として使用することを意図しています。
本当にしたいことは、次のようなものです(コードを参照)。 Constオブジェクトは作成時に初期化されます。コンパイラの中には、あなたがしようとしていることを理解している人もいますし、この形式の割り当てについて不平を言う人もいません。
SomeType const& obj(*LIB_CreateSomething());
通常、C++ではこれは行いません。
理由の1つは、「生の」(裸の)ポインタが、あなたが所有者である場合にのみ実際に眉をひそめることです。それがあなたに属していない場合は、書式的にポインタを使うことに何も問題はありません。
もう1つは、ポインタがnullの可能性があり、NULLを参照に直接キャストすると参照が使用できなくなることです。
別のコメントで述べたように、あなたは実際に所有者であり、その場合、メモリを管理することが期待されます。あなたは参照でそれを行うことはできません。
ポインタが最初にヌルでないことを確認します。 –
これを行うことで何を得ることを望んでいますか? –
@MikelFわからない、私の質問は本当に*基本*です。 – UghSegment