0

いくつかのポインターを使用する必要があるクラスに直面しています (古いライブラリに依存しているため、ここでスマート ポインターを使用するのは簡単ではありません)。プロジェクトが進行。

ポインターがあるため、独自のコピー コンストラクターを作成したいと考えています。退屈で保守が難しいため、すべての非ポインター データ メンバーを含む初期化リストを書き出して、新しいメンバーが追加されるたびに更新したくありません。

どういうわけかデフォルトのコピーコンストラクターに頼って、いくつかのポインターを変更するだけでいいのですが、これが可能かどうかはわかりません。これを行う方法、またはこの状況に対処するための他の手法はありますか?

私自身の質問に答えるかもしれないいくつかの考え。

データ メンバーは、別のクラスに配置できます。次に、元のクラスにデータ クラスのオブジェクトを 1 つだけ含めることができ、そのデフォルト コピーを実行できます。

もっと良いものはありますか?

4

2 に答える 2

2

クラスが生のポインターを所有していない場合は、それらを浅いコピーして、すべて良いと呼びます。

クラスポインターを所有している場合は、適切なスマート ポインターを使用して、そこから生のポインターを外部ライブラリの API に渡します。

最後に、あなたとライブラリが所有権を共有している場合は、ライブラリを捨てて、まともなインターフェースを備えたものを見つけてください。または、絶対に必要な場合は、クラスのポインターメンバーをspecial_library_pointer_holder、外部ライブラリに関して保持するよりも各ポインターを適切にコピー/割り当て/などする方法を知っているクラスに配置special_library_pointer_holderし、元のクラスに.

于 2013-08-30T21:01:13.840 に答える
0

ここでの最善のアプローチは、スマート ポインターに仕事を任せて、The Rule Of Zeroに従うことだと思います。

于 2013-08-30T21:01:25.390 に答える