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