我写了一个小程序,但是主析构函数不能正常工作。这是程序的代码:
#include<iostream.h>
class citizen {
private:
char* name;
char* nationality;
public:
citizen(char* name, char* nationality) {
this->name = name;
this->nationality = nationality;
}
citizen(const citizen &obj) {
name = obj.name;
nationality = obj.nationality;
}
void display() {
cout << "Name: " << name << endl;
cout << "Nationality: " << nationality << endl;
}
~citizen() {
if(name){
delete[]name;
}
if(nationality) {
delete []nationality;
}
}
};
main() {
citizen obj1("Ali", "Pakistani");
obj1.display();
{
citizen obj2 = obj1;
}
obj1.display();
system("pause");
}
我所知道的是,在main
我分配 to 状态的函数中obj1
,obj2
从那个地方他们两个现在都指向同一个内存区域。而代码citizen obj2 = obj1;
位于两个大括号之间。
{
citizen obj2 = obj1;
}
因此,在执行第二个花括号后,obj2
应该销毁并删除变量name
和nationality
. 当我obj1.display();
第二次打电话时,它应该在屏幕上显示垃圾。
但是obj1
仍然打印我在构造函数中提供的确切名称,即使它不应该是。
请解释这种行为。