关于shared_ptr智能指针的简单理解
什么是智能指针
智能指针是一个模板函数,为我们封装好了一系列的方法来进行内存的自动管理。本质上我们也可以通过编写自己的模板类来实现和智能指针类似的功能,后续会提到相关的内容。
使用智能指针的优点
在使用智能指针之前,我们可以回顾一下以前我们在使用指针对内存进行操作。
比如现在我们编写了一个Test类,定义如下:
class Test
{
public:
int TestGet() {
return Num;
}
void showNum() {
cout << Num << endl;
}
void TestSet(int num) {
this->Num = num;
}
Test() {
Num = 0;
cout << "调用默认构造函数Test()" << endl;
}
Test(int Num) {
this->Num = Num;
cout << "调用构造函数Test(num)" << endl;
}
virtual ~Test() {
cout << "调用析构函数~Test()" << endl;
}
private:
int Num;
};
之后我们new一块内存,并用一个指针指向它
Test* ptr1 = new Test;
下面我们来分析可能造成的三种情况:
1.没有使用delete语句
- 如果不使用delete语句,这块内存就不会被释放。如果在编程的过程中不小心忘了,那这块内存就被浪费掉了。
2.内存泄漏
- 第一种情况还不是最可怕的情况,若此时改变了ptr1指针的指向,比如:
ptr1 = nullptr;就会出现内存泄漏的情况,此时没有任何指针指向之前申请出来的内存,那么这块内存就无法被我们正常delete释放了。
3.多次析构</

本文介绍了C++中的智能指针shared_ptr,包括它的作用、优点、源码简化分析,以及如何使用。shared_ptr能自动管理内存,避免内存泄漏和多次析构问题。通过引用计数机制实现多指针指向同一内存时的正确释放。同时提醒了使用过程中避免直接使用get()操作原始指针,以及使用移动语义后的注意事项。
最低0.47元/天 解锁文章





