智能指针的初步认识

it2025-08-28  5

开辟了内存空间,必定要释放内存空间,如果不释放就会造成内存泄漏,引发安全问题。 如果代码量很少的时候,我们会记得释放掉开辟的空间,但是如果代码量过大,我们会忘记开辟的空间,那么就需要智能指针来帮助我们自动释放空间。 例如:

#include<memory> int main() { int* tmp = new int[10]; auto_ptr<int> ap(tmp); cout << *ap <<endl; //delete []tmp; return 0; }

有了智能指针,下面的释放空间的语句我们就不需要了。 但是有个疑问,智能指针不应该是指针吗?

走到定义之后,我们会发现auto_ptr不是一个指针,而是一个类,ap就是一个对象,它会像指针一样使用。

那么,智能指针到底是怎样实现的,那我们就只有进入底层去深入剖析了。 首先是它的构造函数,

其次是拷贝构造函数,拥有权的释放 把指针_Myptr保留,然后将自己赋值成空

然后是运算符的重载 返回_Myptr指针指向的值 接下来是赋值语句,将自己的对象的拥有权释放掉,再重新设置给当前要赋值的对象 如果是指向不同空间的指针,释放当前指针_Myptr,把新的空间的指针_Ptr给_Myptr,让_Myptr管理新的空间

最后是析构函数 将空指针_Myptr释放

智能指针有很多的分类 C++98 auto_ptr

C++11 unique_ptr

Boost库 scoped_ptr(不允许拥有权的转移) scoped_array

shared_ptr shared_array

weak_ptr

instrusive_ptr

最新回复(0)