智能指针 向右看齐 2023-06-21 03:46 42阅读 0赞 # 智能指针 # 智能指针的智能,体现在智能指针能够在每次完成工作之后自动释放占用的空间。 我们通常使用的裸指针,使用完成后需要通过delete或者free来进行释放,那么如果我们没有进行释放操作,或者函数无法运行到释放操作的部分就已经在某些条件下退出了,该指针就会成为野指针。 例如: int main() { int *a(new int); if(1) throw "-1";//或:return -1; delete a; return 0; } 上述代码中,就是未运行到delete语句时,函数会在某种条件下退出函数栈,那么a就成了野指针,a所在的空间就会发生内存泄露。 还有一种情况,当用户希望用两个指针管理同一块内存时,使用拷贝构造默认的形式是浅拷贝,那么释放资源时就会出现两次释放同一块资源的错误,如果我们把它改成深拷贝,那么这两个指针就不再满足管理同一块内存的需求。 在C++中,我们使用智能指针来解决这样的问题。 智能指针,使用类来实现,利用对象出作用域自动调用析构函数的特性,来保证所占用内存的及时释放。 简单的智能指针模型可以这样写: template<typename T> class smartp { public: smartp(T =T()) { } ~smartp() { delete _p;} private: T *_p; }; # 不带计数的智能指针 # 1. auto\_ptr 转移对象的所有权。 也就是当我们使用一个auto\_ptr(设为A)去拷贝构造或者给另一个auto\_ptr(设为B)赋值的时候,原来的A就会变成空指针,因此,在auto\_ptr的使用过程中,始终保证只用最后一个指针来管理资源。 2. scoped\_ptr 直接删除拷贝构造和赋值函数,也就是不允许使用拷贝构造或赋值运算来构造新的scoped\_ptr指针。 3. unique\_ptr 同样的,unique\_ptr也只使用最后一个指针来管理资源,并且它也删除了拷贝构造函数和赋值函数,取而代之的是带右值引用参数的拷贝构造和赋值。在使用的过程中,将被拷贝对象使用move强转成右值类型,然后调用对应的拷贝构造和赋值函数。 # 带引用计数的智能指针 # *给每一个对象资源匹配一个引用计数,使多个智能指针可以管理同一个资源。 计数减为0时释放资源。* 1. shared\_ptr 可以改变资源的引用计数 定义对象的地方使用强智能指针。 2. weak\_ptr 不会改变资源的引用计数,用以解决强智能指针循环引用(交叉引用)时资源无法释放的问题。 应用智能指针的地方使用弱智能指针。
相关 智能指针 C++里面的四个智能指针分别是:auto\_ptr,shared\_ptr,weak\_ptr,unique\_ptr,其中后三个是C++11支持的,第一个auto\_ptr已 客官°小女子只卖身不卖艺/ 2023年10月09日 12:14/ 0 赞/ 157 阅读
相关 智能指针 智能指针 1.引入使用计数 定义智能指针的通用技术是采用一个使用计数。智能指针将一个计数器与类指向的对象相关联。使用计数跟踪该类有多少个对象共享同一指针。使用计数为0时 Bertha 。/ 2023年06月23日 15:29/ 0 赞/ 109 阅读
相关 智能指针 智能指针 智能指针的智能,体现在智能指针能够在每次完成工作之后自动释放占用的空间。 我们通常使用的裸指针,使用完成后需要通过delete或者free来进行释放,那么如 向右看齐/ 2023年06月21日 03:46/ 0 赞/ 43 阅读
相关 智能指针 有三个智能指针,auto\_ptr(弃用)、unique\_ptr、shared\_ptr. 智能指针可以自动跟踪动态内存,在其过期时自动释放。 include< ゝ一纸荒年。/ 2023年02月21日 14:05/ 0 赞/ 142 阅读
相关 智能指针 class MyClass { public: MyClass(int a){}; ~MyClass() 逃离我推掉我的手/ 2023年01月03日 12:54/ 0 赞/ 282 阅读
相关 c++ 智能指针 前言 C++里面的四个智能指针: auto\_ptr, unique\_ptr,shared\_ptr, weak\_ptr 其中后三个是C++11支持,并且第一个已经被 左手的ㄟ右手/ 2022年09月07日 12:15/ 0 赞/ 371 阅读
相关 智能指针 scoped\_ptr解析 《超越C++标准库-Boost库导论》 头文件: "boost/scoped\_ptr.hpp" boost::scoped\_ptr 用于确 超、凢脫俗/ 2022年08月09日 16:37/ 0 赞/ 350 阅读
相关 智能指针 RAII(Resource Acquisition Is Initialization): 资源分配即初始化,定义封装一个类,用来实现调用构造函数时就可完成资源的分 梦里梦外;/ 2022年07月17日 03:43/ 0 赞/ 320 阅读
相关 智能指针 在C++中,如果指针使用不当,比如没有及时释放指针所指向的内存,或者野指针等,会造成系统发生不可预估的错误,为了防止这一情况的发生,C++ STL提供了一系列智能指针类型 智 偏执的太偏执、/ 2022年05月17日 07:29/ 0 赞/ 359 阅读
相关 智能指针 智能指针 在java中如果在堆上开辟内存是不需要手动释放的,我们叫做智能指针;但是在C++中如果用new在堆上开辟了空间,我们需要用delete进行手动释放,否则造 悠悠/ 2022年03月18日 11:54/ 0 赞/ 384 阅读
还没有评论,来说两句吧...