C++——探索智能指针的设计原理
前言: RAII是资源获得即初始化, 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源, 并且在对象的声明周期内控制资源, 最后在对象析构的时候释放资源。注意, 本篇文章参考——C++ 智能指针 - 全部用法详解-CSDN博客
看完博主的文章的友友们, 可以去看一下该篇文章, 该作者写的比博主通俗易懂。
目录
为什么需要智能指针
智能指针
auto_ptr
auto_ptr的用法:
auto_ptr的模拟实现:
unique_ptr
unique_ptr的用法
unique_ptr的模拟实现
weak_ptr
weak_ptr的用法:
weak_ptr的模拟实现
智能指针坑点
为什么需要智能指针
首先我们来看一下这一个简单的程序:
void func() { int* p = new int; } int main() { func(); return 0; }
在这个程序里面, func中定义了一个指向堆区一块空间的p。 但是当出了作用域后, p指针就被销毁了, 但是p指针指向的空间没有被销毁,这个时候就发生了内存泄漏。
另外一种情况就是我们虽然手动释放了内存, 但是中途发生了异常, 程序发生跳转, 手动释放内存被截胡了。 也会导致发生内存泄漏。
void test() { int* ptr = new int; if (1) { throw "发生异常"; //这里发生截胡, 无法走到下一行。 } delete ptr; //这里没有释放资源 } int main() { try { test(); } catch (const char* str) { cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。