どのようにC ++クラスを設計するためにのみ、ヒープやスタック上のオブジェクトを作成することができます

唯一のヒープオブジェクト上で作成することができたクラスを設計します

  • プライベートクラスのコンストラクタは、プライベートコピーコンストラクタとして宣言しました。防止の他は、スタック上のオブジェクトを生成するためのコピーを呼び出します。
  • 静的メンバ関数を提供し、静的メンバ関数にヒープオブジェクトの作成を完了

ご注意ください

  1. 我々はコンストラクタの民営化意志スタック上のオブジェクトの作成を防止するために、ヒープとスタック上のオブジェクトを作成するためにコンストラクタを呼び出します。
  2. コピーコンストラクタは、スタック上のオブジェクトを作成することです。
1  クラスHeapOnly
 2  {
 3。 公共4。     静的 HeapOnly * のCreateObject()
 5。     {
 6。         復帰 新しい新しい HeapOnly; // これが唯一の新しい介してそのようなオブジェクトの作成を行い、クラスオブジェクトはヒープ内に作成されることを保証することができ
7      }
 8      
9  プライベート10      HeapOnly(){} // オブジェクトを作成するには、コンストラクタが民営化され、スタック上のオブジェクトの作成を防止するために、ヒープ及びスタックのコンストラクタに呼び出されます
。11      HeapOnly(CONST HeapOnly&)は= 削除 ; // コピーコンストラクタオブジェクトがスタック上に作成されている
12 }。

 

唯一のスタック上のオブジェクトを作成することができ、クラスの設計

この方法の一つ:

  • クラスのコンストラクタのプライベート。ヒープ上に作成されたオブジェクトを防ぎます
  • 静的メンバ関数を提供し、静的メンバ関数を完了するために、スタックオブジェクトを作成します

ご注意ください

  1. ヒープ上に作成され、スタックオブジェクトはコンストラクタを呼び出す、ヒープ上に作成されたオブジェクトを防ぐために、コンストラクタを民営化する必要があります。
1  クラスStackOnly
 2  {
 3  公共4      静的StackOnlyのCreateObject()
 5      {
 6          リターン StackOnly(); // クラスは、オブジェクトのみスタック上に作成することができるようにオブジェクトを作成するための新しい演算子ではないことを保証
7      }
 8。 プライベート9。      StackOnly(){} // オブジェクトを作成し、ヒープで作成されたオブジェクトを防止するために、コンストラクタは、民営化されなければならない、ヒープ及びスタックのコンストラクタで呼び出される
10 }。

 

オペレータは、新たなシールド、実用的にも配置されます:方法二つのオブジェクトが唯一のように長い間、新たな機能をマスクすることができるよう、そのシールドnew演算子と配置新しい表現の注意は、ヒープ上に作成することはできませんスタック、上で作成することができます新しいはマスク。

1  クラスStackOnly    
 2  {    
 3  公共4      StackOnly(){} 
 5  プライベート6      ボイド * オペレータ 新しい(size_tのサイズ)。    
7      無効 オペレータ 削除無効 *のP); 
8 }。  

 

ご注意ください

  • 動的なメモリ割り当てと解放事業者のための新しいおよび削除ユーザー、オペレータ下部に呼び出し演算子の新しいグローバル関数のスペースを適用する新しいシステムが提供する新しいオペレータの削除グローバル関数、演算子削除グローバル関数によって基礎となる自由アップ・スペースを削除。
  • 直接実空間、アプリケーションスペースのmalloc成功リターンを通じて適用するオペレータ新しい関数malloc関数、アプリケーションスペースが失敗し、変更のユーザー設定の場合には十分なスペースの対応策、対応策を実行して、適用するか、例外をスローし続けることをしてみてください。
  • オペレータ削除機能は、無料でスペースを解放するために、最終的です

おすすめ

転載: www.cnblogs.com/al-fajr/p/11846269.html