0

私は開発中のそれほど小さくないクラス (頻繁に変更される) を持っており、パブリック コピー コンストラクターとコピー割り当てを提供する必要はありません。クラスには値のセマンティクスを持つオブジェクトがあるため、デフォルトのコピーと割り当てが機能します。

クラスは仮想メソッドを持つ階層構造になっているため、仮想 Clone() を提供してスライスを回避し、「ポリモーフィック コピー」を実行します。

実行する特別なことがない限り、コピー割り当てと構築保護を宣言し、それらを定義する (および変更との同期を維持する) ことはしたくありません。

別の方法があるかどうか誰かが知っていますか?

ありがとう!

ウガソフト

4

4 に答える 4

3

ポリモーフィック階層からのオブジェクトで、値のセマンティクスを備えていますか? ここは何かがおかしい。

クラスに値セマンティクスが本当に必要な場合は、J.Cplien の Envelop-Letter Idiom を参照するか、Regular Objects [1] に関するこの記事を参照してください。

[1] ショーン・ペアレント。「オブジェクトを超えて」。私たちが書くソフトウェアを理解する。http://stlab.adobe.com/wiki/index.php/Papers_and_Presentations。C++ 接続。2005 年 11 月。

HTH、

于 2008-11-06T16:25:38.220 に答える
0

これを可能にするC++言語には何もないと思います。私はこの点で間違っていることを望みますが。

私は過去にこれに遭遇し、次の解決策を考え出しました。クラスはC1だと思います。

  1. Dataというプライベート内部クラスを定義します
  2. 代わりに、C1でデラレするメンバー全員をデータに配置します
  3. C1間でデータインスタンスをコピーするだけの保護されたコピーコンストラクターを定義します。

このアプローチにはいくつかの欠点があります。つまり、少し不自然に感じ、直接のフィールドアクセスを排除します(小さなアクセサ機能で軽減できます)。

これは、探していることを行うための回り道ですが、コピーコンストラクターを手動で作成する必要がありません。

于 2008-11-06T16:13:00.553 に答える
0

たぶん、私は解決策を見つけました...

ここでは空である保護されたコピー コンストラクターをルート基本クラスに配置できます (または、データ メンバーを持たない小さなインターフェイス クラスを作成し、多重継承を実行できます)。デフォルトのもので問題ない場合、派生クラスで Copy ctor を再定義しません。現在、デフォルトのコピー ctor はクライアントからアクセスできません (ベースにアクセスできないため) が、デフォルトは機能します!

反論ある?

于 2008-11-06T16:26:10.683 に答える
0

C++0xが使えるなら…

class A
{
    protected:
        A(const A&) = default;
};
于 2011-08-04T08:22:06.950 に答える