在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