さて、ランダムな抽象基本クラスがあり、この基本クラスへのポインタをデータメンバーとして含むBase
クラスがあるとしましょう。Foo
それで
class Foo
{
public:
Foo(Base*);
private:
Base* ptr;
}
ここで、基本クラスへのポインターを使用する理由は、Foo
オブジェクトがポインターを持つ派生クラスを選択できるようにするためです。ここで注意が必要なのは、私にとって、のコンストラクターの実装ですFoo
。
こうすれば
Foo::Foo(Base* _ptr)
{
Foo::ptr = _ptr;
};
コンストラクターが終了した後も存在するFoo::ptr
ため、ユーザーはが指すオブジェクトを調整することができます。定期的に更新する必要があるため、オブジェクトを定数で_ptr
指すようにすることはできません。今、コンストラクターの最後に行を追加することを考えていましたが、ユーザーが間接参照を試みる可能性があるため、それも危険である可能性があります。_ptr
Foo::ptr
_ptr = NULL
_ptr
この作業を行うために私が考えることができる唯一の方法は、が指すオブジェクトのコピーを作成し、そのコピーのアドレスに_ptr
初期化することです。Foo::ptr
ただし、コンパイル時にクラスがわからないオブジェクトのコピーコンストラクターを呼び出すことができないため、が指すオブジェクト_ptr
には、メンバー関数などが必要になります。Clone()
それで、ない場合にこれを行うためのエレガントな方法はありClone()
ますか?それともそれが本当に唯一の可能性ですか?