modern effective C++ 18

1.概述
该条款是关于智能指针的,unique_ptr主要用来管理互斥的资源,经常用来对C++中的强聚合关系建模,一个类可以把另外一个类当做成员,这样两个类的生命周期完全相同,大类完全掌控了小类的构造和析构,但是该类的内存需求相对较大,可以采用指针来管理类的成员函数,使用RAII在构造中new 在析构时delete,同样可以使用unique_ptr在构造时分配,当类生命周期结束时,会自动调用析构函数而不需要手动的写delete语句,更加安全。
2.
有一个例子,在函数中返回一个在堆上分配的内存,如果不使用智能指针,用户则需要手动delete。
unique_ptr的内存大小与普通指针大小相当,但是当使用用户给定的删除器时,内存消耗会相应变大。
猜想主要用途时兼容C代码,C没用析构的概念,一般都是通过函数调用来释放结构体资源。比如说函数
event_base_new() 和event_base_free()分别申请和释放某个结构体,这样就可以定义一个只能

#include <event2/event.h>
#include <memory>
int main()
{
    auto deleter = [](event_base* base)
    {
        printf("deleter\n");
        event_base_free(base);
    };
    std::unique_ptr<event_base,decltype(deleter)> ptr(event_base_new(),deleter);

}

只是个人认为一种可能的用法。

unique_ptr不支持拷贝,只支持移动。
reset 和 移动拷贝都会造成指针指向的内存被回收,如果原来的指针不为空的话。
可以很方便地把unique_ptr转为shared_ptr 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值