四种智能指针

总结:

auto_ptr 是 C98标准,在 C++11 后已被抛弃

unique_ptr 是 auto_ptr 的替代品,和 auto_ptr 一样,同一个对象只能由一个指针指向

shared_ptr 是最常用的智能指针,同一个对象可以有多个指针指向,其数量由引用计数来描述,当引用计数减为0时,会释放指向的内存

weak_ptr 专门为了解决 shared_ptr 循环引用问题而设的,具体见下文

auto_ptr:

auto_ptr是C++98标准中提供的智能指针,它的主要作用是管理动态分配的对象,并在对象不再需要时自动释放内存。然而,auto_ptr在实现上存在一些问题,因此在C++11标准中被废弃,并被unique_ptr取代。

auto_ptr与boost库中的shared_ptr不同之处在于引用计数的处理。auto_ptr没有考虑引用计数,因此一个对象只能由一个auto_ptr所拥有。当将一个auto_ptr赋值给另一个auto_ptr时,会转移这种拥有关系,即原来的auto_ptr将不再拥有该对象。

另外,auto_ptr不能指向数组。因为auto_ptr在析构的时候只是调用delete来释放内存,而数组应该要调用delete[]来释放内存。

总结起来,auto_ptr是一种简单的智能指针,但由于其存在的问题,已经被废弃。在实际开发中,建议使用更安全和更灵活的智能指针,如unique_ptr或shared_ptr。

unique_ptr:

unique_ptr是C++11中引入的智能指针,用于管理动态分配的对象。它是一种独占所有权的智能指针,意味着每个unique_ptr对象都是其所指向对象的唯一所有者。

以下是关于unique_ptr的介绍和示例:

创建一个空的unique_ptr对象:

std::unique_ptr<int> ptr1;

检查unique_ptr对象是否为空:

if (ptr1 == nullptr) { // unique_ptr对象为空 }

创建一个unique_ptr对象并关联一个动态分配的对象:

std::unique_ptr<int> ptr2(new int(42));

使用unique_ptr对象访问所指向的对象:

int value = *ptr2;

使用unique_ptr对象释放所指向的对象:

ptr2.reset(); // 释放所指向的对象

使用unique_ptr对象移动所有权:

std::unique_ptr<int> ptr3 = std::move(ptr2); // 移动ptr2的所有权给ptr3

请注意,unique_ptr对象在其析构函数中会自动删除关联的指针,因此不需要手动释放内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值