次の方法で共有


unique_ptr::release

返された格納されているポインターの所有権を呼び出し元に解放し、格納されているポインターの値を nullptr に設定します。

pointer release();

プロパティ値/戻り値

格納されているポインターを返します。

解説

release を使用して、unique_ptr が保存した生のポインターの所有権を引き継ぎます。 呼び出し元は、返されたポインターの削除を担当します。 unique-ptr は、既定で構築される空の状態に設定します。 release を呼び出した後に、互換性のある型の別のポインターを unique_ptr に割り当てることができます。

使用例

この例は、返されたオブジェクトに release の呼び出し元が対応する方法を示しています。

// stl_release_unique.cpp
// Compile by using: cl /W4 /EHsc stl_release_unique.cpp
#include <iostream>
#include <memory>

struct Sample {
   int content_;
   Sample(int content) : content_(content) {
      std::cout << "Constructing Sample(" << content_ << ")" << std::endl;
   }
   ~Sample() {
      std::cout << "Deleting Sample(" << content_ << ")" << std::endl;
   }
};

void ReleaseUniquePointer() {
   // Use make_unique function when possible.  
   auto up1 = std::make_unique<Sample>(3);
   auto up2 = std::make_unique<Sample>(42);
   
   // Take over ownership from the unique_ptr up2 by using release
   auto ptr = up2.release();
   if (up2) {
      // This statement does not execute, because up2 is empty.
      std::cout << "up2 is not empty." << std::endl;
   }
   // We are now responsible for deletion of ptr.
   delete ptr;
   // up1 deletes its stored pointer when it goes out of scope.   
}

int main() {
   ReleaseUniquePointer();
}

コンピューターの出力:

  

必要条件

ヘッダー: <memory>

名前空間: std

参照

処理手順

方法: unique_ptr インスタンスを作成して使用する

関連項目

unique_ptr クラス

<memory>

その他の技術情報

unique_ptr のメンバー

<memory> メンバー