智能指针的设计思路

1.RAII

在传统的C++中需要程序员记得用delete对自己用new申请的堆内存进行释放,对于C++而言最早在98版引入智能指针的概念,之后的C++11做了加强,让程序员不需要关心手动释放内存。解决这个问题的灵感之一来源于RAII。RAII-Resource Acquisition Is Initialization(资源获取就是初始化),利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。RAII在C++11中的内存回收设计上的应用的关键词就是栈对象析构函数

auto_ptr源码

auto_ptr的问题

2.RAII思想体会

// -std=c++11
#include <iostream>
using namespace std;
class RAII
{
   public:
       RAII()
       {
          std::cout << "RAII Object Constructor" << endl;
          m_pInt = new int;
       }
       ~RAII()
       {
           std::cout << "RAII Object Destructor" << endl;
           if(m_pInt!=nullptr)
           {
              delete m_pInt;
           }
           
       }
    private:
       int* m_pInt;
};
void test()
{
     RAII raiiobj;
};
int main()
{
    test();
}

3.吸取深拷贝和浅拷贝的精华

4.考虑引用计数

5.利用好写时复制技术

Guess you like

Origin blog.csdn.net/Edidaughter/article/details/121447041