C++基础之创建自己的智能指针

本文介绍了C++中创建自定义智能指针以防止内存泄漏的方法,通过构造函数和析构函数确保内存管理。文章探讨了运算符重载、拷贝构造函数和赋值运算符的重要性,并提出了引用计数的智能指针策略,讨论了引用计数在多对象共享内存时的作用,同时提到了`boost::shared_ptr`作为C++中的一种实现。
摘要由CSDN通过智能技术生成

    在C++中,忘记释放指针指向的内存,是造成内存泄露的一个主要原因。如果我们能保证,对每一个int* p = new int; 能有一个 delete p; 匹配,就能很好的管理内存。构造函数和析构函数是成对出现的好伙伴,把指针操作包装成一个类。重载运算符*,这样在语法上可以像使用普通指针一样使用My_IntPtr。

class My_IntPtr
{
public:
	My_IntPtr(int* p)
	{
		m_p = p;
	}

	~My_IntPtr()
	{
		delete m_p;
	}

	int& operator*()
	{
		return *m_p;
	}
private:
	int* m_p;
};

 

通过My_IntPtr来使用指针,不会担心内存泄露的问题。

	int* p = new int;
	My_IntPtr pi(p);
	*(pi.m_p) = 10; //访问成员变量方法(成员变量要public的才行)

	*pi = 18; //利用了重载的*运算符


P.S. 运算符重载:只是一种语法上的方便,本质上它就是函数调用,函数的名字是operator@,其中@是被重载的运算符。

返回值int&,而不是int。如果返回int型的话,相当于是个常量,不能作为左值(可以改变值的变量)被赋值了,这与平常的习惯不符。

以下三种情况,编译器报错:left operand must be l-value


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值