1. 程式人生 > >深入學習c++--智能指針

深入學習c++--智能指針

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++--智能指針