c++11 新特性

       1) C++11标准更好地管理和使用动态内存,防止内存泄漏和悬垂指针,定义了两个智能指针类型,分别是shared_ptr和unique_ptr。shared_ptr可以让多个智能指针指向同一个对象,而unique_ptr只容许一个指针独自指向一个对象。

        Shared_ptr是用于管理动态内存的指针,它拥有垃圾回收机制。可与其他对象共享管理,这种指针具有取得指针所有权并共享该所有权的能力。当最后一个指针释放所有权时,也就是引用计数为0时,指针的所有者将删除该指针。Shared_ptr自身如果被销毁,或者通过赋值或者通过调用reset函数,他们的值被改变的话,它就释放对共享对象的所有权。

        Unique_ptr拥有它所指向的对象,它与shared_ptr不同点是,在任一时刻,只能有一个unique_ptr指向一个对象。如果这个unique_ptr被销毁,则它所指向的对象也要被销毁。       

        #include <memory>
        #include <iostream>
        using namespace std;

int main()
{
    shared_ptr<int> ptr = make_shared<int>(100);
    std::shared_ptr<int>ptr2(new int(10));
    unique_ptr<int>ptr4(new int(20));
    unique_ptr<int>ptr3(ptr4.release());
    unique_ptr<int>ptr5;
    ptr5.reset(ptr3.release());
    cout << "*ptr: " << *ptr << endl;
    cout << "*ptr:2 " << *ptr2 << endl;
    cout << "*ptr5: " << *ptr5 << endl;
    return 0;
}

        2)

   shared_ptr可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针独占的问题,但也引来了引用成环的问题,这种问题靠它自己是没办法解决的,所以在C++11的时候将shared_ptrweak_ptr一起引入了标准库,用来解决循环引用的问题。 

        weak_ptr的原理
weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是,将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。不论是否有weak_ptr指向,一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。从这个角度看,weak_ptr更像是shared_ptr的一个助手而不是智能指针。

【C++】weak_ptr弱引用智能指针详解_Yngz_Miao的博客-CSDN博客


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值