【内存】智能指针的设计思路

0.前置知识

阅读链接

1.知识点
  1.1 RAII
  1.2 理解深拷贝与浅拷贝;
  1.3 掌握使用引用计数解决浅拷贝问题;
  1.4 在引用计数实现中,理解写时拷贝技术;
2.理解深拷贝与浅拷贝
  2.1 浅拷贝:某种程度上可以节省空间,但可能存在一个空间多次重复释放的问题.
  2.2 深拷贝:可以解决可能存在的一个空间多次重复释放的问题,但有可能造成造成空间的浪费.
3.理解深拷贝与浅拷贝各自的优缺点
4.使用引用计数解决浅拷贝实现中出现的问题
5.解决引用计数中的写时拷贝技术实现

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.利用好写时复制技术解决值改变问题

写时拷贝技术及用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值