标签:模式 存在 释放 控制 cloud delete 智能指针 所有权 shared
为什么要使用智能指针:
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。
1. auto_ptr(c++98的方案,cpp11已经抛弃)
弃用原因:当两个智能指针都指向同一个堆空间时,每个智能指针都会delete一下这个堆空间,这会导致未定义行为。同时由于使用了转移语义(就是下面的p1将控制权转给p2),在使用p1会出现内存崩溃。
采用所有权模式。
auto_ptr< string> p1 (new string ("I reigned lonely as a cloud.”)); auto_ptr<string> p2; p2 = p1; //auto_ptr不会报错.
此时不会报错,p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。所以auto_ptr的缺点是:存在潜在的内存崩溃问题!
标签:模式 存在 释放 控制 cloud delete 智能指针 所有权 shared
原文地址:https://www.cnblogs.com/lxy-xf/p/11420071.html