2021-01-29

本文探讨了在C++中如何使用智能指针(unique_ptr和shared_ptr)来有效管理内存,避免资源泄漏。unique_ptr用于唯一所有权,通过std::move确保安全转移,而shared_ptr则支持共享所有权,当最后一个所有者消失时自动释放对象。这种做法提高了代码的清晰性和安全性。
摘要由CSDN通过智能技术生成

智能指针

使用unique_ptr或者shared_ptr而不是new和delete

理由:避免资源泄漏

1、使用unique_ptr传递所有权

unique_ptr是最廉价的安全传递指针所有权的方式

// 不好
void foo()
{
    char *msg = new char[16];
    // fill msg

    // 不明确发送消息缓冲区的所有权:
    // 1、发送成功由send函数释放缓冲区
    // 2、发送失败由使用者释放缓冲区
    // 很容易混淆, 导致内存异常(内存泄漏或者重复释放)
    int result = send(msg, 16);
    if (result != 0) {
        // 错误处理
        delete[] msg;
    }
}
// 好
void foo()
{
    auto  msg = std::make_unique<char[]>(16);
    // fill msg
    // 明确传递消息缓冲区的所有权,不存在内存泄漏、重复释放的风险
    int result = send(std::move(msg), 16);
    if (result != 0) {
        // 错误处理
    }
}

2、使用shared_ptr共享所有权

使用std::shared_ptr是实现共享所有权的标准方法,最后一个所有者删除对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值