我需要知道为什么这个程序在我编译时终止。我不明白终止的原因是什么。 请告诉我他们的问题也是他们的解决方案。 谢谢。C++程序终止
#include<iostream.h>
class citizen{
private:
char* name;
char* nationality;
public:
citizen(){
name = "No name is given";
nationality = "No nationality is given\n";
}
citizen(char* name, char* nationality){
this->name = name;
this->nationality = nationality;
}
void display(){
cout << "Name: " << name << endl;
cout << "Nationality: " << nationality << endl;
}
~citizen(){
if(name){
cout << endl << "\nGoing to delete: "<< name << endl;
delete []name;
}
if(nationality){
delete []nationality;
cout << "Going to nationality: "<< nationality << endl;
}
}
citizen(const citizen &obj){
int size = sizeof(obj.name);
name = new char[size+1];
strcpy(name, obj.name);
int size2 = sizeof(obj.nationality);
nationality = new char[size2 + 1];
strcpy(nationality, obj.nationality);
cout << "\nI'm copy construcotr\n";
}
};
如果您使用的是C++,那么使用'string'代替c-style字符串有什么危害。 – Arpit
在你的析构函数中使用'delete []'会导致你在你的拷贝构造函数没有创建你的对象的时候遇到很大的问题,就像在试图删除它之后尝试输出'nationality'一样。 –
不不不不!现在停下来,忘记你学习过的关于C++的一切。停止使用'new []'和'delete []'。了解RAII,标准库(尤其是容器和字符串)并阅读[良好的C++书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – rightfold