4

TDPL 7.1.5.1では、ウィジェットw2がw1に割り当てられるという議論があり、作成者は「フィールドごとにw2をw1に割り当てると、w2.arrayがw1.arrayに割り当てられます。これは、配列の内容を実際にコピーすることなく、配列の境界を簡単に割り当てることができます。ソースウィジェットに配列の複製を作成し、その複製をターゲットウィジェットに割り当てることが必要なため、これを修正する必要があります。」私が見たところ、あなたがポストブリットを書いた場合、デフォルトのopAssignはあなたのポストブリットを呼び出します。その場合、これは本の中で、または少なくとも疑わしいアドバイスでは正しくないようです。さらに、ポストブリットを作成した場合は、opAssignを作成する必要はないようです。これは問題の正しい評価ですか?

より少ないコードを書くことが良いと仮定すると、構造体にopAssignを実装するための状況は何ですか?

4

1 に答える 1

4

最初に頭に浮かぶのは、構造体型ではない構造体に何かを割り当てることです (構造体doubleへの a のようにAngle)

また、構造体ごとに一意である必要がある外部リソースがある場合 (純粋な値のセマンティクス) opAssign、デストラクタで破棄して postblit で再割り当てする代わりに、 を使用して古いリソースにコンテンツを直接コピーできます。

この最後の使用は、リソースの割り当て解除/割り当てがディープコピーよりもはるかに高価な場合にのみ役立ちます(TBH、今は本当に考えられません)

于 2012-11-27T16:05:03.533 に答える