本文主要是介绍C++成员函数 - 析构函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
析构函数
栈帧和栈里面的对象都要符合:
后进先出,也就是后定义先销毁/析构
对象空间的创建和销毁都是栈在管
所以析构函数只是清理资源,并不是销毁对象
全局的先创建和初始化
局部静态存储在静态区不在栈帧,在第一次运行的时候初始化
析构先清理在main函数栈帧里面的aa2和aa1
main函数结束后再调用全局和静态的,所以再清理aa4和aa0,接着清理aa3,符合后定义先析构
func3 传值返回返回的是aa的拷贝,aa要调用aa的拷贝构造,然后拷贝对象就销毁了
func4 传引用返回返回的是aa的别名
对于自定义类型,传引用返回比传值返回更高效
如果aa出了func4的作用域就销毁了,那么引用返回是有问题的
赋值运算符重载格式
对于任何一个类,只需要写一个>= 或者 <= 重载,剩下的比较运算符重载复用即可
比如日期类:
// d1 = d2
bool Date::operator==(const Date& d)
{return _year == d._year&& _month == d._month&& _day == d._day;
} // d1 != d2
bool Date::operator!=(const Date& d)
{//return _year != d._year// && _month != d._month// && _day != d._day;return !(*this == d);
}// d1 > d2
bool Date::operator>(const Date& d)
{if (_year > d._year|| (_year == d._year && _month > d._month)|| (_year == d._year && _month == d._month && _day > d._day)) // 年大{return true;}//else if (_year == d._year && _month > d._month) // 年一样比较月//{// return true;//}//else if (_year == d._year && _month == d._month && _day > d._day) // 年月相等比较天//{// return true;//}else{return false;}
}
当需要实现>=,<,等运算符时
可以直接复用
// d1 >= d2
bool Date::operator>=(const Date& d)
{return (*this > d || *this == d);
}// d1 < d2
bool Date::operator<(const Date& d)
{return !(*this >= d);
}// d1 <= d2
bool Date::operator<=(const Date& d)
{return !(*this > d);
}
这篇关于C++成员函数 - 析构函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!