快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C++》 远方有一堆篝火,在为久候之人燃烧! 一、智能指针的引入 什么是智能指针?为什么要引入它呢?在此之前,先来看一段代码: void test() { int* p1 = new int; int* p2 = new int; delete p1; delete p2; } C++内存分配中,使用 new 操作符,如果分配失败,可能会抛出 std::bad_alloc 异常。那么请想一想: p1抛异常会怎么样? p2抛异常会怎么样? 如果p1抛出异常,则不会有问题出现。而如果p2申请时抛出异常,那么就会导致p1申请的空间无法释放,导致内存泄漏。 二、智能指针的概念 鉴于异常导致执行流乱跳,可能造成内存泄漏,我们期望一种“智能”的指针,可以在抛异常时,自动释放已申请的空间。 智能指针的核心思想,就是 RAII。 RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。...