Skip to content

Latest commit

 

History

History
74 lines (55 loc) · 1.69 KB

File metadata and controls

74 lines (55 loc) · 1.69 KB

get_deleter

  • memory[meta header]
  • std[meta namespace]
  • function template[meta id-type]
  • cpp11[meta cpp]
namespace std {
  template <class D, class T>
  D*
    get_deleter(const shared_ptr<T>& p) noexcept; // (1) C++11
  template <class D, class T>
  constexpr D*
    get_deleter(const shared_ptr<T>& p) noexcept; // (1) C++26
}

概要

shared_ptrオブジェクトが持つデリータを取得する。

戻り値

pが持っているデリータの型がDのcv修飾を外した型に等しい場合、そのデリータオブジェクトへのポインタを返す。 型が等しくなければヌルポインタを返す。

備考

この関数によって返されるポインタは、pと同じ寿命を持つ。

デリータオブジェクトの所有権はpが持っているため、この関数のユーザーがデリータオブジェクトをdeleteしてはならない。

例外

投げない

#include <memory>

struct MyDeleter {
  template <class T>
  void operator()(T* p)
  {
    delete p;
  }
};

int main()
{
  std::shared_ptr<int> p(new int(3), MyDeleter());

  MyDeleter* deleter = std::get_deleter<MyDeleter>(p);
}
  • std::get_deleter[color ff0000]

出力

バージョン

言語

  • C++11

処理系

  • Clang: 3.0 [mark verified]
  • GCC: 4.3.6 [mark verified]
  • ICC: ??
  • Visual C++: 2008 (TR1) [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified]

参照