Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::shared_ptr<T>::~shared_ptr

      From cppreference.com
      <cpp‎ |memory‎ |shared ptr
       
       
      Memory management library
      (exposition only*)
      Allocators
      Uninitialized memory algorithms
      Constrained uninitialized memory algorithms
      Memory resources
      Uninitialized storage(until C++20)
      (until C++20*)
      (until C++20*)
      Garbage collector support(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
       
      std::shared_ptr
      Member functions
      shared_ptr::~shared_ptr
      Modifiers
      Observers
      (until C++20*)
      Non-member functions
      (until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20)
      functions(until C++26*)
      Helper classes
      Deduction guides(C++17)
       
      ~shared_ptr();

      If*this owns an object and it is the lastshared_ptr owning it, the object is destroyed through the owned deleter.

      After the destruction, the smart pointers that shared ownership with*this, if any, will report ause_count() that is one less than its previous value.

      [edit]Notes

      Unlikestd::unique_ptr, the deleter ofstd::shared_ptr is invoked even if the managed pointer is null.

      [edit]Example

      Run this code
      #include <iostream>#include <memory> struct S{    S(){std::cout<<"S::S()\n";}    ~S(){std::cout<<"S::~S()\n";}struct Deleter{void operator()(S* s)const{std::cout<<"S::Deleter()\n";            delete s;}};}; int main(){auto sp=std::shared_ptr<S>{new S, S::Deleter{}}; auto use_count=[&sp](char c){std::cout<< c<<") use_count(): "<< sp.use_count()<<'\n';};     use_count('A');{auto sp2= sp;        use_count('B');{auto sp3= sp;            use_count('C');}        use_count('D');}    use_count('E'); //  sp.reset();//  use_count('F'); // would print "F) use_count(): 0"}

      Output:

      S::S()A) use_count(): 1B) use_count(): 2C) use_count(): 3D) use_count(): 2E) use_count(): 1S::Deleter()S::~S()

      [edit]See also

      destroys aweak_ptr
      (public member function ofstd::weak_ptr<T>)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/shared_ptr/%7Eshared_ptr&oldid=160314"

      [8]ページ先頭

      ©2009-2025 Movatter.jp