問題タブ [virtual-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
319 参照

c++ - C++クラス継承の問題

こんにちは私は2つのクラスを持っています。1つはInstructionと呼ばれ、もう1つは命令クラスから継承するLDIと呼ばれます。

次に、Instruction型のポインターを作成し、LDI型の新しいインスタンスを指すようにします。

次のコンパイラエラーが発生します。私が間違っていることについて何か考えはありますか?

0 投票する
3 に答える
2831 参照

c++ - clone() を使用しない C++ 仮想コンストラクター

ポリモーフィック クラスへのポインタの STL コンテナの「ディープ コピー」を実行したいと考えています。

C++ FAQ Lite の項目 20.8 で説明されているように、 Virtual Ctor Idiomによって実装されたPrototypeデザイン パターンについて知っています。 それは単純明快です:

ディープコピーは次のとおりです。

欠点

Andrei Alexandrescuは次のように述べています。

実装はclone()、すべての派生クラスで同じパターンに従う必要があります。その繰り返し構造にもかかわらず、メンバー関数の定義を自動化する合理的な方法はありませんclone()(つまり、マクロを超えて)。

さらに、 のクライアントはABC何か悪いことをする可能性があります。(つまり、クライアントが何か悪いことをするのを妨げるものは何もないので、それ起こります.)

より良いデザイン?

私の質問は次のとおりです。派生クラスにクローン関連のコードを記述させることなく、抽象基本クラスをクローン可能にする別の方法はありますか? (ヘルパー クラス? テンプレート?)


以下は私の文脈です。うまくいけば、それは私の質問を理解するのに役立ちます.

クラスで操作を実行するためのクラス階層を設計していますImage:

画像操作はユーザー定義です。クラス階層のクライアントは、以下から派生した独自のクラスを実装しますImgOp

イメージに対して複数の操作を連続して実行できます。

複数の画像がある場合、セットを分割して複数のスレッドで共有できます。「スレッドセーフ」を保証するために、各スレッドは、含まれているすべての操作オブジェクトの独自のコピーをv持っている必要があります--vは、各スレッドでディープ コピーされるプロトタイプになります。

編集済み:スレッドセーフ バージョンでは、Prototype デザイン パターンを使用して、ptrs ではなく、ポイント先オブジェクトのコピーを強制します。

これは、イメージ操作クラスが小さい場合に意味があります。 の一意のインスタンスへのアクセスをシリアル化せずImgOp、各スレッドに独自のコピーを提供します。

難しいのは、新しいImgOp派生クラスの作成者がクローン関連のコードを作成しないようにすることです。(これは実装の詳細であるためです。これが、興味深い繰り返しパターンでポールの回答を却下した理由です。)