C++技巧辅导(两次调用析构函数)
来源:优易学  2011-11-20 14:00:50   【优易学:中国教育考试门户网】   资料下载   IT书店
  在类生成临时对象时,遇到一个问题,程序会两次调用析构函数
  #include <cstring>
  #include <iostream>
  using namespace std;
  class stack
  {
  public:
  stack(const char *value);
  ~stack();
  char * data;
  };
  stack::stack(const char *value)
  {
  if(value)
  {
  data = new char[strlen(value)+1];
  strcpy(data,value);
  }
  else
  {
  data = new char[1];
  *data = '\0';
  }
  }
  inline stack::~stack()
  {
  cout << "Destructor" << endl;
  //delete []data; //此处会报错
  }
  void dosth(stack pstk)
  {
  cout << pstk.data << endl;
  }
  int main()
  {
  stack str("iamxczhang");
  dosth(str);
  return 0;
  }
  查了一些资料,还不是很清楚,但是经过仔细分析后,青年人网提示是系统调用默认拷贝构造函数的结果。
  在返回对象和按值传递参数时,要生成临时对象,生成临时对象要调用默认拷贝构造函数。
  通过这个例子更让加深了对Effective C++的理解。
  只要类里有指针变量就得自己写拷贝构造函数和赋值函数,但是你确定用不着这些函数时,可以把这些函数做private声明而不去实现它,这就防止了会有人去调用它们,也防止了编译器去生成它们。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训