深入學習c++--智能指針
阿新 • • 發佈:2019-04-30
typedef mem stream obj ptr oid const class ()
1. 幾種智能指針
1. auto_ptr: c++11中推薦不使用他
2. shared_ptr: 每添加一次引用 就+1,減少一次引用,就-1;做到指針進行共享
3. unique_ptr: 一個指針同時只能有一個使用者使用
4. weaked_ptr: 與shared_ptr搭配使用
1.1 shared_ptr
參考:https://zh.cppreference.com/w/cpp/memory/shared_ptr
std::shared_ptr
是通過指針保持對象共享所有權的智能指針。多個 shared_ptr
對象可占有同一對象。下列情況之一出現時銷毀對象並解分配其內存:
- 最後剩下的占有對象的
shared_ptr
- 最後剩下的占有對象的
shared_ptr
被通過 operator= 或 reset() 賦值為另一指針。
#include <iostream> #include <memory> #include <thread> #include <chrono> #include <mutex> class Object { public: Object(int id) : m_id(id) { std::cout << "init obj " << m_id << std::endl; }~Object() { std::cout << "bye bye " << m_id << std::endl; } int id() const { return m_id; } private: int m_id; }; typedef std::shared_ptr<Object> ObjectPtr; void interfaceOfSharedPtr() { ObjectPtr null; ObjectPtr obj(new Object(1)); std::cout << "ref count is " << obj.use_count() << std::endl; } int main() { interfaceOfSharedPtr(); return 0; }
深入學習c++--智能指針