智能指针
title: 智能指针 date: 2018-04-02 15:21:32 categories: C/C++ tags: 指针 为什么使用动态指针? 在C++中,动态内存的管理是通过一对运算符来完成的: new: 在动态内存中为对象分配空间并返回一个指向该对象的指针,同时可以对这个对象初始化。 delete: 接受一个动态对象的指针,销毁该对象并释放与之关联的内存。 这样动态内存的使用就很容易出现问题: 忘记释放内存(delete)就会产生内存泄漏的问题。 过早释放内存(在还有指针引用该内存的时候就释放了它)就会产生引用非法内存的指针。 为了防止出现这种情况,更容易更安全地使用动态内存, 自C++11开始提供了两种智能指针类型来管理动态对象。 什么是智能指针? 智能指针是存储指向动态分配(堆)对象指针的类。智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。 智能指针的原理是什么? 资源分配即初始化RAII(Resource Acquisition Is Initialization):RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。 定义一个类来封装资源的分配和释放,在构造函数完成资源的分配 和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。