web-dev-qa-db-ja.com

C ++オブジェクトの存続期間の管理と値/参照の受け渡しと返送に関する簡単な資料

C++変数の有効期間のルールと、関数パラメーターの受け渡しと返送のベストプラクティスを含む本の投稿、PDF、または抜粋を誰かが指摘できるかどうか疑問に思いました。値や参照を渡すタイミング、所有権の共有方法、不要なコピーの回避方法など。これは私の特定の問題ではありません。本能でルールを理解するのに十分長い間、C++でプログラミングしてきました。それは、この言語の初心者の多くがつまずくものであり、私は彼らにそのようなことを指摘していただければ幸いです。

3
dsign

要約投稿のルールは次のとおりです。

  1. 値渡し+コピーは関連しています+スライス
  2. 参照渡し+ポリモーフィズムは関連しています
  3. 所有権の受け渡しは(通常)ポインターを介して行われます。
  4. sizeof(T)はコンパイル時定数であり、すべてのc ++タイプにコンパイル時サイズを持たせます
  5. shared_ptrを介した所有権の共有
  6. 所有権スタイルを決して渡さない
  7. 関数のローカルスコープから上位のスコープにエスケープするには、データをコピーする必要があります。これは、ローカルスコープのデータストレージが関数呼び出しの終了後に消えるためです。
  8. コールスタックはツリー内の1つのパスです。関数呼び出しがサブツリーに移動しています
  9. ユーザー定義の型は特別です-ヘッダーファイル内のクラスの順序は継承と構成にとって重要です-クラススコープの有効期間はヒープまたはスタックのいずれかに関連付けることができます
  10. 多形ファクトリは通常、所有権の受け渡しを使用します。ただし、コピー/クローンおよび参照渡しを使用して実装することもできます。
  11. 不要なコピーを避けることは悪い習慣です-コピーはすべてのdataでサポートされるべきです。
  12. インターフェイスは、コンパイル時の量のデータをインターフェイス経由で渡すことのみをサポートします。すべてのデータを小さな断片に分割する必要があります。動的な量では、インターフェイスへの関数呼び出しを繰り返す必要があります。
  13. コンストラクターパラメーターを使用すると、オブジェクトにパラメーターを追加できます
  14. 配列内のすべてのヒープ割り当ては型システムの外部にあります。動的な量のメモリを内部に含めることができる型は存在しません。
4
tp1