C++ Memory::get_deleter



C++ Memory::get_deleter 對於建立客戶端程式碼共享指標例項的庫很有幫助。當客戶端將共享指標返回時,庫需要知道共享指標是來自客戶端還是庫,如果是來自庫,則需要訪問在建立例項時儲存在刪除器中的私有資料。

語法

以下是 C++ Memory::get_deleter 的語法:

D* get_deleter (const shared_ptr<T>& sp) noexcept;

引數

sp − 這是一個共享指標。

示例 1

讓我們來看下面的例子,我們將使用 get_deleter 並獲取輸出。

#include <iostream>
#include <memory>
int main(){
   std::shared_ptr<int> iptr(new int(999), [](int*p) {
      delete(p);
   });
   auto _d = std::get_deleter<void(*)(int*)>(iptr);
   if(_d)
      std::cout<<"0";
   else
      std::cout<<"1";
   return 0;
}

輸出

讓我們編譯並執行上面的程式,這將產生以下結果:

1

示例 2

下面是另一個例子,我們將使用 get_deleter 並獲取輸出。

#include <iostream>
#include <memory>
struct D {
   void operator()(int* p){
      std::cout << "Welcome To Tutorialspoint\n";
      delete[] p;
   }
};
int main (){
   std::shared_ptr<int> foo (new int[11],D());
   int * bar = new int[20];
   return 0;
}

輸出

執行以上程式碼後,將顯示如下輸出:

Welcome To Tutorialspoint

示例 3

讓我們來看另一個場景,我們將使用 get_deleter 並獲取輸出。

#include <iostream>
#include <memory>
struct A {
   A(){
      std::cout << "HELLO\n";
   }
};
struct B {
   void operator()(A* p) const{
      std::cout << "WORLD\n";
      delete p;
   }
};
int main(){
   std::unique_ptr<A, B> up(new A(), B());
   B& del = up.get_deleter();
}

輸出

程式碼執行後,將生成如下輸出:

HELLO
WORLD
廣告