您当前的位置: 首页 > 

顺其自然~

暂无认证

  • 2浏览

    0关注

    1317博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

智能指针的实现

顺其自然~ 发布时间:2022-05-20 18:27:06 ,浏览量:2

内存有四块:全局区、栈区、堆区、代码区。

全局区存放着的是等到程序结束前才会释放里面的数据

代码区是存放着编译后的二进制的0和1

栈区:压栈、出栈,会自动管理释放

堆区:new出来的需要手动delete,由程序员管理

而智能指针的实现是利用了栈区和堆区的存储特性来实现的。

一、对象开辟在栈区,析构函数会自动释放内存
class Person{
public:
	Person(int age) {
		this->m_age = age;
	}
	~Person() {
		coutshowAge(); 等同于person->showAge();
	Person* operator->() {
		return this->person;
	}

	//4、重载*     模拟(*sp).showAge(); 等同于(*person).showAge();
	Person& operator*() {
		return *this->person;
	}

private:
	Person * person;
};

int main() {
	//1、sp作为智能指针,开辟到栈上,自动释放。
    //把new出来的Person*类型作为智能指针类的有参构造的传入参数
	smartPointer sp(new Person (10));
	
	//3、模拟sp->showAge(); 等同于person->showAge();在智能指针内部进行了运算符重载
	sp->showAge(); 
	//实际上重载了之后,返回的是Person*类型,也就是说sp->是个Person*指针,
    //因此想要调用showAge函数的时候,应该要sp->->showAge();但是编译器给自动做了优化处理了
	
	//4、模拟(*sp).showAge(); 等同于(*person).showAge();在智能指针内部进行了运算符重载
	(*sp).showAge();
	//重载之后返回的是Person*指针指向的对象本体
	
	return 0;
}
总结

如果有new出来的类对象,是需要程序员手动delete释放内存的,为了防止程序员健忘,用智能指针类去管理这个new出来的类对象,实现自动delete释放内存的目的。并且运用运算符重载的功能,实现智能指针对象的调用类对象成员函数的功能,模拟成类对象一样的调用成员函数功能。

转自:智能指针的实现_每天告诉自己要努力的博客-CSDN博客_智能指针怎么实现的 

关注
打赏
1662339380
查看更多评论
立即登录/注册

微信扫码登录

0.0440s