栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++智能指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++智能指针

传统指针存在一些问题:

需要手动管理内存、容易发生内存泄漏(忘记释放、出现异常等 释放之后产生野指针

智能指针就是为了解决传统智能指针存在的问题

auto_ptr

存在缺陷,现在已经被弃用

share_ptr
//智能指针p是在栈空间
//auto_ptr 不能用于数组,此处有异常
SmartPointer p(new Person[10]);
p->run();
shared_ptr p(new Person[10]);
智能指针的自实现
//智能指针的自实现
#include 
using namespace std;

class Person 
{
private:
	int m_age;
public:
	Person(int age):m_age(age)
	{
		cout << "Person(int):" << m_age << endl;
	}
	void run()
	{
		cout << "run():" << m_age << endl;
	}
	~Person() 
	{
		cout << "~Person()" << endl;
	}
};

template 
class SmartPointer 
{
private:
	T* m_obj;
public:
	SmartPointer(T* obj) :m_obj(obj) {}
	~SmartPointer()
	{
		//保证了在SmartPointer销毁的时候指向的内存空间也能释放
		if (m_obj == nullptr) return;
		delete m_obj;
	}

	//重载运算符,让智能指针对象p可以调用Person的run函数
	T* operator->()
	{
		return m_obj;
	}
};

int main()
{
	{
		//智能指针p是在栈空间
		SmartPointer p(new Person(20));
		p->run();
	}
	
	return 0;
}

思考下面的代码有没有问题:

 分析:出现二次析构!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847074.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号