目录
前言
在日常的类应用场景中,我们会很多时候涉及到申请内存new关键词和清空内存delete的使用,而我们在很多时候会在申请内存后,忘记了或者没有及时清理内存,从而会引发很多意想不到的问题,这里我们引入智能指针。
一、智能指针是什么?
在C++中,智能指针是一种用来自动管理对象内存的指针类型。它们提供了一种自动化的方式来分配和释放对象的内存,从而减少内存泄漏和悬空指针的风险。
智能指针的工作原理是通过包装原始指针并在适当的时候自动调用删除器,来管理分配的内存。删除器是一个函数对象,它负责释放指针所指向的内存。
使用智能指针可以简化内存管理,并减少手动释放内存和悬空指针的风险,从而提高代码的安全性和可靠性。
二、智能指针代码步骤
1.创建一个基本的类,这个类有你想实现的功能
代码如下(示例):
class num_1 //普通类
{
public:
int age; //年龄
string name; //姓名
num_1(){} //默认构造
num_1(string name,int age) 有参构造
{
this->name = name;
this->age = age;
}
};
2.智能指针类
代码如下(示例):
class num_2 //智能指针类
{
public:
num_1 *p; //声明一个num_1的对象
num_2(){} //默认构造函数
num_2(num_1 *p) //有参构造函数传入一个num_1类型的对象
{
this->p = p; //赋值
}
~num_2() //自动帮我们析构 delete 对象
{
if(this->p)
{
delete this->p;
this->p = NULL;
}
}
num_1 *operator->() //重载->
{
return this->p;
}
};
3.整体代码
#include <iostream> //标准的输入输出流
#include<string.h>
#include<stdlib.h>
#include<cmath>
#include<time.h>
#include<string>
using namespace std;
class num_1 //普通类
{
public:
int age;
string name;
num_1(){}
num_1(string name,int age)
{
this->name = name;
this->age = age;
}
};
class num_2 //智能指针类
{
public:
num_1 *p; //声明一个num_1的对象
num_2(){} //默认构造函数
num_2(num_1 *p) //有参构造函数传入一个num_1类型的对象
{
this->p = p; //赋值
}
~num_2() //自动帮我们析构 delete 对象
{
if(this->p)
{
delete this->p;
this->p = NULL;
}
}
num_1 *operator->() //重载->
{
return this->p;
}
};
int main(void)
{
num_2 p1(new num_1("吴清华",22));
cout << "p1姓名为 : " << p1->name << " p1年龄为:" << p1->age << endl;
return 0
}
总结
在智能指针类中,通过声明一个目标类的对象来保持main函数中传入的目标类对象,再通过析构函数每次都可以实现智能delete。
标签:name,age,智能,num,内存,思路,指针 From: https://blog.csdn.net/weixin_47378530/article/details/139673951