+ -
当前位置:首页 → 问答吧 → C++小程序的析构函数

C++小程序的析构函数

时间:2011-12-01

来源:互联网

下面的程序在  
  p[0]= B("ma", 4.8);  
这一步时,我知道它会调用B里面的构
造函数,但显示的结果是它还调用了析
构函数使count自减,这是为什么呢??
初学者求指教啊???



#include <iostream.h>
#include <string.h>

class B {
  char name[80];
  double b;
public :
  static int count;
  B(char * s, double n)
  { strcpy(name, s); b = n;
cout << "调用一般构造函数, count : "
  << ++count << endl; }
  B( )
 
  { cout << "调用无参数构造函数,count: "
  << ++count << endl; 
  }
  ~B( )
 { cout << "调用析构函数撤消对象 " << name 
  << "后, count : " << --count << endl; 
 }
 void Getb(char * s, double & n)
 { strcpy(s, name); n = b; }
};

int B::count = 0;

void main( )
{ B * p; double d; char str[80];
  p = new B[3];
cout << "初始化对象数组p[ ] !\n";  
  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(str, d);
//两个参数均为地址传递方式,在getb()函数体内,对n的
  操作就是对d的操作,即将b赋给了d。
cout << str << " , " << d << endl;
  }
  cout << "\n";
  delete [ ]p;
}



该程序的输出结果:
调用无参数构造函数, count : 1
调用无参数构造函数, count : 2
调用无参数构造函数, count : 3
初始化对象数组p[ ] !
调用一般构造函数, count : 4  
调用析构函数撤消对象 ma后, count : 3
调用一般构造函数, count : 4  
调用析构函数撤消对象 wang后, count : 3
调用一般构造函数, count : 4  
调用析构函数撤消对象 li后, count : 3
ma , 4.8
wang , 3.6
li , 3.1
 
调用析构函数撤消对象 li后, count : 2
调用析构函数撤消对象 wang后, count : 1
调用析构函数撤消对象 ma后, count : 0

作者: CP5949527   发布时间: 2011-12-01

在线等指教!!!!

作者: CP5949527   发布时间: 2011-12-01

你是构造了一个对象B(叫甲),然后赋值给p[0]。赋值时,p位置又构造了一个对象B(叫乙),执行了拷贝构造把甲赋给乙,然后析构甲。

作者: lofeo   发布时间: 2011-12-01

临时对象,在执行完表达式之后会自动析构

作者: qscool1987   发布时间: 2011-12-01