1.声明文件
//MyIteger.h #pragma once #include<iostream> class MyInteger { public: MyInteger(int value); ~MyInteger(); /** *1.一般会加const,一是因为不想修改实参,二是可以接受const和非const两种实参 *2.使用引用是为了避免对实参进行拷贝,以提高效率 *3.返回引用是为了MyInteger可以像基本类型一样可以连续赋值,如:m1=m2=m3 */ MyInteger& operator=(const MyInteger& myInteger); private: int* value; };2.定义文件
//MyInteger.cpp #include "MyInteger.h" MyInteger::MyInteger(int value) { this->value = new int(value); } MyInteger::~MyInteger() { /** *1.C++标准规定:delete空指针是合法的,没有副作用。 *2.delete是释放指针指向的内存,并不是指针本身所占有的内存。所以delete后,指针的还是指向那块区域,并未清0,所以如果下次用到,就会发生xxx空间不能访问的异常。因此以后delete后要赋值为空。 */ if (this->value != NULL) { delete this->value; this->value = NULL; } } MyInteger& MyInteger::operator=(const MyInteger& myInteger) { //这里判断并释放堆内存可防止赋值导致的堆空间未释放,例如 m1=m2,如果不先进行一次判断,value会直接指向新的堆空间,原本指向的堆空间无法释放。 if (this->value != NULL) { delete this->value; this->value = NULL; } this->value = new int(*myInteger.value); return *this; }3.调用文件
// Main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 #include <iostream> #include"MyInteger.h" int main() { MyInteger myIteger(5); MyInteger m1(2); MyInteger m2(3); m2 = m1 = myIteger; }