注册 登录
编程论坛 C++教室

怎么调用析构函数??

caiqiufu 发布于 2006-12-21 22:55, 1010 次点击
#include<iostream.h>
class A
{
public:
A(int i=0)
{m=i;cout<<"Constructor called."<<m<<endl;}
void Print() const
{cout<<m<<endl;}
~A()
{cout<<"Destructor called."<<m<<endl;}
private:
int m;
};
void main()
{
const int N=5;
A my;
my=N;//该处为什么调用了一次析构函数??
my.Print();
}
4 回复
#2
dragonfly2006-12-22 11:30
my=N; 不出错吗?

[此贴子已经被作者于2006-12-22 11:30:45编辑过]

#3
maoguoqing2006-12-22 12:54
以下是引用dragonfly在2006-12-22 11:30:11的发言:
my=N; 不出错吗?

自然不会出错。。
拷贝构造函数,付值操作符,以及析构函数,被称作三个火枪手,他们经常都是同时出现的,
你用了默认的付值操作符,它应该是这样的:operator = (A&) ;它首先用N初始化一个临时对象,
然后将这个对象的值浅拷贝给你操作符前面的对象,如果说他调用了析购函数,那肯定是对这个
临时对象的析构。。

#4
dragonfly2006-12-25 10:40
以下是引用maoguoqing在2006-12-22 12:54:47的发言:

自然不会出错。。
拷贝构造函数,付值操作符,以及析构函数,被称作三个火枪手,他们经常都是同时出现的,
你用了默认的付值操作符,它应该是这样的:operator = (A&) ;它首先用N初始化一个临时对象,
然后将这个对象的值浅拷贝给你操作符前面的对象,如果说他调用了析购函数,那肯定是对这个
临时对象的析构。。

付值操作符重载是被编译器默认了的?

#5
maoguoqing2006-12-25 10:52
当然。。。每一个类都有一个默认的付值操作符操作符。。
1