問題タブ [rule-of-five]
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.
c++ - CppCoreGuidelines C.21 は正しいですか?
Bjarne Stroustrup の CoreCppGuidelines を読んでいるときに、私の経験と矛盾するガイドラインを見つけました。
C.21には以下が必要です。
または
=delete
デフォルトの操作を定義する場合は、または=delete
それらすべてを定義します
次の理由で:
特殊関数のセマンティクスは密接に関連しているため、1 つをデフォルト以外にする必要がある場合、他の関数も変更する必要がある可能性があります。
私の経験から、デフォルト操作の再定義の最も一般的な 2 つの状況は次のとおりです。
#1: 継承を許可するデフォルトの本体を持つ仮想デストラクタの定義:
#2: RAII 型のメンバーの初期化を行うデフォルト コンストラクターの定義:
私の経験では、他のすべての状況はめったにありませんでした。
これらの例についてどう思いますか。それらは C.21 規則の例外ですか、それともすべてのデフォルト操作をここで定義する方がよいでしょうか? 他によくある例外はありますか?
c++ - スマート ポインターは 5 のルールにどのように影響しますか?
クラスでポインターを使用する場合は、5 のルールを実装する必要があることを学びました。ポインターを使用しない場合は、デフォルトを使用しても問題ありません。実際、デフォルトを使用することをお勧めします。しかし、これはスマート ポインターでどのように機能するのでしょうか。たとえば、 を含むクラスは次のint*
ようになります。
しかし、スマート ポインターを使用する場合、これだけで十分でしょうか?