test.reset(); // 释放掉智能指针托管的指针内存,并将其置NULL test.reset(new Test()); // 释放掉智能指针托管的指针内存,并将参数指针取代之 reset函数会将参数的指针(不指定则为NULL),与托管的指针比较,如果地址不一致,那么就会析构掉原来托管的指针,然后使用参数的指针替代之。然后智能指针就会托管参数的...
智能指针是C++11引入的新特性。本篇文章非常详细介绍了C++智能指针的原理、应用与陷阱,通过丰富的代码实例介绍了三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr的原理、使用方法和适用场景,还介绍了智能指针的线程安全性、使用陷阱以及自定义删除器的使用等。本文较长,阅读需要花较长时间,但读者若...
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存...
简介: c++11新特性——智能指针详解 智能指针: 一、解决了什么问题 内存泄漏:在未使用智能指针时,我们在堆上malloc申请一段内存或者new一个对象,如果忘记释放就会造成内存泄漏; 指针共享所有权的传递和释放,比如:多线程同时使用同一个对象时的析构问题。 使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序...
一、智能指针简介 智能指针是C++标准库中的一个重要概念,主要用于管理动态分配内存的对象。与传统指针不同,智能指针能够自动管理内存的分配和释放,从而减少内存泄漏和其他内存相关错误的风险。C++中主要有三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr。
C++98中产生了第一个智能指针auto_ptr. C++boost给出了更实用的scoped_ptr和shared_ptr和weak_ptr. C++TR1,引入了shared_ptr等.不过注意的是TR1并不是标准版本. C++11中引入了unique_ptr,shared_ptr和weak_ptr.需要注意的是unique_ptr对应boost中的scoped_ptr.并且这些智能指针的实现原理是参考boost中实现的. 总...
简介:【C++11(三)】智能指针详解--RAII思想&循环引用问题 1. 前言 相信学C++的同学或多或少的听说过 智能指针这个词,博主刚听见这个词时 ,觉得它应该很复杂,并且很高大上,但不 管是多牛的东西,都是人写出来的,是可 学习的!不要怀着害怕的心理来学习它 ...
一、boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源。关于RAII的讨论可以参考前面的文 章。在使用boost库之前应该先下载后放在某个路径,并在VS 包含目录中添加。下面是boost 库里面的智能指针: (一)、scoped_ptr<T> ...
智能指针在实现时通常使用引用计数技术,即每个智能指针对象都包含一个计数器,用于记录有多少个智能指针对象引用了同一个内存块。当引用计数器为0时,说明没有任何智能指针对象引用该内存块,此时内存块就可以被释放。需要注意的是,由于引用计数技术可能存在循环引用的问题,即两个或多个智能指针对象相互引用,导致其...
std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_ptr,只能移动它。 主要特性 独占所有权: 一个unique_ptr不能被复制,只能被移动。 自动释放: 当unique_ptr离开作用域时,它所管理的对象会被自动删除。