私はクラスを持っており、メンバ変数の1つは別の複合クラスであるとします。私は、この複雑なクラスのコピーを作成しないようにしたい、私はちょうど私のクラスでそれを使用したい。 MyClassを整理する最良の方法は何ですか?クラスコンストラクタで複雑なデータをコピーしないようにする
class MyClass
{
public:
MyClass(const ComplexClass& complex_class)
: m_class(complex_class) {}
private:
const ComplexClass& m_class; // What is the best practice here?
};
が、私はこれを行うことができます:私はこのような何かを持っている瞬間
?またはm_classポインタを必要がありますか?あなたはこの状況で何をしますか?
私は奇妙な驚きを避けるために、明示的なMyClass(const ComplexClass * p):m_class(* p){} 'としてコンストラクタを記述します。 –
@Kerrek SBどのような驚きがありますか? –
渡された参照がスコープ内に残っていれば、確かにこれを行うことができ、クラスがもはやそれを必要としなくなるまで、参照されたオブジェクトを破壊するものはありません。しかし、参照が有効であることを保証する契約がない場合は、オブジェクトをコピーする必要があります。 –