C++中的析构函数

析构函数

概念:
        析构函数执行与构造函数相反的操作:构造函数初始化对象的非static的数据成员,析构函数则是释放对象所用的资源,并销毁对象的非static数据成员。

特征:
        析构函数的名字是由波浪线接类名构成,他没有返回值,也不接受参数,所以析构函数不能被重载。

注意:

        析构函数和构造函数相同,构造函数有一个函数体和初始化部分,析构函数也有一个函数体和析构部分。在构造函数中,成员的初始化是在函数体执行之前进行,成员的初始化顺序是按照成员在类中出现的次序所决定的,而在析构函数中正好相反,是先执行函数体再执行析构部分,成员的销毁顺序与初始化顺序相反。

        析构函数的调用是在对象最后一次被使用之后。

        析构函数的析构部分是隐式的,函数体并不直接销毁成员。

        销毁类类型的成员需执行成员自己的析构函数。

        内置类型没有析构函数,因此销毁内置类型成员什么也不需要做。

        隐式的销毁一个内置指针类型成员不会delete它所指向对象。

        当指向一个对象的引用或指针离开作用域时,析构函数不会被执行。

合成析构函数:

        当一个类未定义自己的析构函数时,编译器会为他定义一个合成析构函数,在合成析构函数执行后,成员会被自动销毁。


代码实现

<span style="font-size:14px;">class Complex
{
private:
	double _real;
	double _image;

public:
	Complex() {}
	Complex(double x, double y) :_real(x), _image(y) {}
	Complex(const Complex &a) 
	{
		_real = a._real;
		_image = a._image;
	}
	Complex &operator=(const Complex &a)//赋值拷贝函数(运算符重载)
	{
		if (this == &a)
		{
			return *this;
		}
		this->_real = a._real;
		this->_image = a._image;
		return *this;
	}
	void Print()//打印对象
	{
		cout << _real << _image << endl;
	}
	~Complex(){}//析构函数
};

int main()
{
	Complex C1;
	Complex C3(2.0, 1.2);
	C1 = C3;
	Complex C2(C3);
	C3.Print();
	C2.Print();
	C1.Print();
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值