深入学习c++--智能指针

Posted douzujun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入学习c++--智能指针相关的知识,希望对你有一定的参考价值。

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++--智能指针的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 指针和“智能指针”

C++|深入理解智能指针

《深入理解C指针》学习笔记--- 指针之外

shared_ptr智能指针模板类的简单实现(c++11)

shared_ptr智能指针模板类的简单实现(c++11)

C/C++学习笔记:智能指针详解