C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのRAIIとスマートポインタ


C++でのRAII

RAII(Resource Acquisition Is Initialization)は、リソースのライフサイクルを制御するC++手法です。これはクラスバリアントであり、オブジェクトの存続期間に関連付けられています。

いくつかのリソースをクラスにカプセル化し、オブジェクトの作成中にコンストラクターによってリソースの割り当てが行われ、オブジェクトの破棄中にデストラクタによってリソースの割り当て解除が行われます。

オブジェクトが存続するまで、リソースは保持されることが保証されています。

void file_write {
   Static mutex m; //mutex to protect file access
   lock_guard<mutex> lock(m); //lock mutex before accessing file
   ofstream file("a.txt");
   if (!file.is_open()) //if file is not open
   throw runtime_error("unable to open file");
   // write text to file
   file << text << stdendl;
}

C++およびマイナスのスマートポインタ;

スマートポインタは、ファイル処理やネットワークソケットなどのメモリ管理として使用できるように通常のポインタを作成できる抽象データ型であり、自動破棄や参照カウントなどの多くのことを実行できます。

C ++のスマートポインタは、テンプレートクラスとして実装できます。テンプレートクラスは、*および->演算子でオーバーロードされます。 auto_ptr、shared_ptr、unique_ptr、weak_ptrは、C++ライブラリで実装できるスマートポインタの形式です。

#include <iostream>
using namespace std;
// A generic smart pointer class
template <class T>
class Smartpointer {
   T *p; // Actual pointer
   public:
      // Constructor
      Smartpointer(T *ptr = NULL) {
         p = ptr;
      }
   // Destructor
   ~Smartpointer() {
      delete(p);
   }
   // Overloading de-referencing operator
   T & operator * () {
      return *p;
   }
   // Over loading arrow operator so that members of T can be accessed
   // like a pointer
   T * operator -> () {
      return p;
   }
};
int main() {
   Smartpointer<int> p(new int());
   *p = 26;
   cout << "Value is: "<<*p;
   return 0;
}

出力

Value is: 26

  1. C ++を使用して、0、1、および2の配列を並べ替えます

    0、1、および2の配列が与えられた場合、すべてのゼロが1の前に最初に来て、すべての2が最後になるように、要素を並べ替えます。配列のすべての要素をインプレースで並べ替える必要があります。 この問題は、DNF(Dutch National Flag)ソートアルゴリズムを使用して解決できます。たとえば、 入力-1 − arr[ ]= {2,0,0,1,2,1 } 出力 − 0 0 1 1 2 2 説明 − DNF並べ替えアルゴリズムを使用して0、1、2を含む要素の指定された配列を並べ替えると、出力が{0,0,1,1,2,2}として出力されます。 入力-2 − arr[ ]= {0,1

  2. LinuxのC++でのファイルグロブ

    ファイルグロブはパス名拡張とも呼ばれます。 ワイルドカードを認識する方法です。 Linuxでパターンを作成し、これらのパターンに基づいてファイルパスの拡張を見つけます。 ワイルドカードパターン パターンに基づいて複数のファイルを選択するために使用される文字列です。 「?」のような文字パターン、「[]」、「*」は、ファイルのパターンマッチングと複数選択に使用されます。 ファイルグロブで使用するワイルドカード文字の例: アスタリスク(*): *パターンは、ファイル名の文字列の後に0文字以上を一致させる必要がある場合に使用されます。 例: file *は、file、files