C++之智能指针

智能指针

定义

  • 智能指针是类模板,在栈上创建智能指针对象
  • 把普通指针交给普通指针对象
  • 智能指针对象过期时,调用析构函数释放普通指针的内存

new 返回的是对象的地址 ,通过赋值语句创建对象一般用的是拷贝构造函数


智能指针unique_ptr(有explicit关键字修饰构造函数,不能通过赋值语句创建智能指针对象,故而通过函数参数传递时,只能用函数指针的引用传递)

该指针独享它指向的对象

 A* a = new A("gml");
    //unique_ptr<A> pu1(a);//也可以用
    unique_ptr<A> pu1(new A("jhx")); //推荐使用
    cout << a->name << endl;
    cout << (*a).name << endl;
    cout << pu1->name << endl;
    cout << (*pu1).name << endl;

get()方法返回裸指针(不负责)

release()方法释放对原始指针的控制权(负责)

move()方法可以转移对原始指针的控制权(负责)

仿函数(用作回调函数)一般用结构体实现?


shared——ptr(该指针共享它指向的对象)

//仿函数式的删除器
struct deleteclass
{
    void operator()(A* a)
    {
        cout << "自定义删除器(仿函数)" << endl;
        delete a;
    }
};


int main()
{
    A* a = new A("gml");
    //shared_ptr<A> pu (a,deleteFfunc);
    shared_ptr<A> pu(a, deleteclass());
}

运行结果:

 


weak_ptr

weak_ptr不控制对象的生命周期,但是能判断对象是否还活着

用lock()函数可以将其提升为shared_ptr,如果对象还活着,返回有效的shared_ptr; 如果死了,则提升会失败,返回一个空的shared_ptr

提升的行为(lock())是线程安全的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值