读C++ Premiere 12章有感

读C++ Premiere 12章有感

动态内存与智能指针

s h a r e d _ p t r shared\_ptr shared_ptr 指针是一种模板,其管理着某个对象的指针,其使用形式类似于一种指向该已知对象的指针(可以直接解引用获取该对象),其模板中的 g e t ( ) get() get() 函数会返回智能指针中保存的对象指针,需要谨慎使用,因为智能指针可能会释放该指针,导致非法地址的出现。

m a k e _ s h a r e d < T > ( a r g s ) make\_shared<T>(args) make_shared<T>(args) 可以通过函数的形式构造对象, p = q p=q p=q 操作会使 p p p 引用计数减少,而 q q q 的引用计数增加,因为这样赋值类似于拷贝构造函数的执行,本质上都是在执行指针的传递,而我们的中间件智能指针在解引用时就像没有存在一样,可以方便我们进行引用计数的自动更改,对智能指针的析构操作会先对引用计数数值进行更改。

使用 d e l e t e delete delete释放一块并非 n e w new new关键字分配的内存或者重复释放一块内存,这种行为是为定义的!

由内置指针(而不是智能指针)管理的动态内存在被显式释放前一直都存在,eg,函数内 n e w new new了一个对象,并通过返回值的形式传递给调用者,那么调用者必须在作用域内对其进行显式的释放。

智能指针的初始化: s h a r e d _ p t r < i n t > p ( n e w i n t ( 1024 ) ) shared\_ptr<int> p(new int(1024)) shared_ptr<int>p(newint(1024)),必须使用直接初始化形式。

如果只能指针管理的资源不是 n e w new new分配的内存,那么记得一定要为其传递一个删除器,让其引用计数变为 0 0 0时,调用该删除器释放相应的资源或者内存。

智能指针未提供下标运算符 。

无二指针

u n i q u e _ p t r unique\_ptr unique_ptr指针不允许拷贝,但是允许在其生命周期结束时执行赋值操作(函数返回一个无二指针)。

弱指针

w e a k _ p t r weak\_ptr weak_ptr指向由 s h a r e d _ p t r shared\_ptr shared_ptr管理的对象,但是呢,不占据 s h a r e d _ p t r shared\_ptr shared_ptr的引用计数。使用之前需要通过 l o c k ( ) lock() lock()操作提升为智能指针进行使用。

a l l o c a t o r allocator allocator

定义和初始化分离,所有的对象都必须通过 c o n s t r u c t construct construct进行构造,销毁也必须逆序调用 d e s t o r y destory destory进行销毁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值