关于析构函数。
using namespace std;
#include<iostream.h>
#include<string.h>
class B
{
public:
B(char *s,double n)
{
strcpy(name,s);
b=n;
cout<<"Constructor.\n";
}
B()
{
cout<<"Default\n";
}
~B(){cout<<"Destructor"<<name<<endl;}
void getb(char *s,double& n){strcpy(s,name);n=b;}
private:
char name[80];
double b;
};
int main()
{
B *p;
double n;
char s[80];
p=new B[3];
p[0]=B("Ma",4.8);
p[1]=B("Wang",3.6);
p[2]=B("Li",3.1);
for(int i=0;i<3;i++)
{
p[i].getb(s,n);
cout<<s<<","<<n<<endl;
}
delete[] p;
return 0;
}
上面是程序代码
Default
Default
Default
Constructor.
DestructorMa
Constructor.
DestructorWang
Constructor.
DestructorLi
Ma,4.8
Wang,3.6
Li,3.1
DestructorLi
DestructorWang
DestructorMa
以上是运行结果
我想问一下为什么
p[0]=B("Ma",4.8);
p[1]=B("Wang",3.6);
p[2]=B("Li",3.1);
这三条语句对应的是这个结果:
Constructor.
DestructorMa
Constructor.
DestructorWang
Constructor.
DestructorLi
对象为什么会在这里调用析构函数呢?
[解决办法]
调试一下就知道怎么回事。
为帮你理解,修改了一下。
using namespace std;
#include<iostream.h>
#include<string.h>
class B
{
public:
B(char const *s,double n)
{
strncpy(name,s, 80);
b=n;
cout<<"Constructor for " << name << std::endl;
}
B()
{
cout<<"Default ctor\n";
}
//copy assignment
B& operator=(B const& lhs)
{
std::cout << "copy assignment for " << lhs.name << std::endl;
if(this != &lhs)
{
strncpy(name, lhs.name, 80);
b = lhs.b;
}
return *this;
}
~B(){cout<<"Destructor for "<<name<<endl;}
void getb(char *s,double& n){strcpy(s,name);n=b;}
private:
char name[80];
double b;
};
int main()
{
B *p;
double n;
char s[80];
p=new B[3];
p[0]=B("Ma",4.8);
p[1]=B("Wang",3.6);
p[2]=B("Li",3.1);
for(int i=0;i<3;i++)
{
p[i].getb(s,n);
cout<<s<<","<<n<<endl;
}
delete[] p;
return 0;
}
结果:
Default ctor
Default ctor
Default ctor
Constructor for Ma
copy assignment for Ma
Destructor for Ma
Constructor for Wang
copy assignment for Wang
Destructor for Wang
Constructor for Li
copy assignment for Li
Destructor for Li
Ma,4.8
Wang,3.6
Li,3.1
Destructor for Li
Destructor for Wang
Destructor for Ma
