【C++】std::unique_ptr

本文详细介绍了std::unique_ptr在C++中的基本概念、内部原理,包括所有权、移动语义、空指针检查和自定义删除器。通过实例展示如何在动态对象管理、内存泄漏预防和自定义资源清理中使用std::unique_ptr,以及使用技巧如std::make_unique和std::move。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

std::unique_ptr学习笔记

1. 基本概念

std::unique_ptr是C++11标准引入的一种智能指针,用于管理动态分配的对象,并在对象不再需要时自动释放其所占用的内存。与传统的裸指针相比,std::unique_ptr具有独特的特点,可以在不需要手动管理内存的情况下确保内存安全。

2. 内部原理

std::unique_ptr的内部原理主要涉及以下几个方面:

  • 所有权语义std::unique_ptr实现了独占式拥有(Exclusive Ownership)语义,即一个std::unique_ptr对象可以拥有对其所指向对象的唯一所有权。当一个std::unique_ptr对象离开其作用域时,它所拥有的对象会被自动释放,从而避免内存泄漏。

  • 移动语义std::unique_ptr支持移动语义,允许资源的所有权从一个std::unique_ptr对象转移至另一个对象。这样可以避免不必要的内存复制,提高程序的性能和效率。

  • 空指针检查std::unique_ptr内部通过空指针来表示空对象(即不拥有任何资源),并且提供了成员函数get()用于获取所管理的指针。在访问被管理的指针前,通常需要使用get()函数进行空指针检查,以确保指针的有效性。

  • 自定义删除器std::unique_ptr允许用户指定一个自定义的删除器(Deleter),用于在释放资源时执行特定的清理操作。这使得std::unique_ptr可以灵活地管理各种类型的资源,例如动态分配的数组、文件句柄等。

3. 应用场景及示例代码

3.1 动态对象的管理

std::unique_ptr常用于管理动态分配的对象,可以确保对象在不再需要时自动释放,避免内存泄漏。

#include <memory>
#include <iostream>

class MyClass {
   
   
public:
    MyClass() {
   
    std::cout << "MyClass constructor" << std::endl; }
    ~MyClass() {
   
    std::cout << "MyClass destructor" << std::endl; }
    void DoSomething() {
   
    std::cout << "Doing something..." << std::endl; }
};

int main() {
   
   
    std::unique_ptr<MyClass></
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值