-2

プロトタイプの設計パターンでは、抽象基底クラスの clone メソッドは以下のように実装されています。

/* From Wikipedia */
class Prototype
{
public:
    virtual ~Prototype() { }

    virtual Prototype* clone() const = 0;
};

class ConcretePrototype : public Prototype
{
  ...
  virtual ConcretePrototype* clone() const 
  { 
      return new ConcretePrototype(*this); 
  } 
};

クライアントはオブジェクトを作成し、次に clone() メソッドを呼び出してオブジェクトのコピーを作成します

new ConcretePrototype(*this) は new ConcretePrototype( ) より安いですか?

4

3 に答える 3

1

の目的を誤解していclone()ます。

「仮想コピーコンストラクタ」です。

コンストラクターを実際に仮想にすることはできません (コピー コンストラクターでさえも)。したがって、解決策は、正確なコピーを作成する必要があるオブジェクトに対して呼び出すことができるメソッドを用意することです。

複製されたコピーには独自の有効期間があるため、オリジナルを安全に破棄できます。

通常、実装クラスにはプライベートまたは保護されたコピー コンストラクターがあると予想されるため、直接呼び出すことはできません。

複製するオブジェクトのタイプを知る必要さえありません。そして、「共変」の戻り値の型に注意してください。

「安い」という言葉の正確な意味がわかりません。クラスにコピーコンストラクターを実装する場合、通常は少なくとも同じくらい効率的であり、通常はクラスの空のインスタンスを作成してからコピーするよりも効率的です。

于 2013-04-16T10:33:31.417 に答える
0

copy c-torパターンの感覚なので、このパターンで使用する必要があります。defaultしかし、それ以外の場合は、すべてコンストラクターと のアクションに依存しcopy-constructorます。

于 2013-04-16T10:27:25.143 に答える