小さなプログラムを書きましたが、メインのデストラクタが正しく動作しません。プログラムのコードは次のとおりです。
#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");
}
私が知っているのは、 tomain
の状態を割り当てている関数で、その場所から両方が同じメモリ領域を指していることです。コードは 2 つの中かっこの間にあります。obj1
obj2
citizen obj2 = obj1;
{
citizen obj2 = obj1;
}
したがって、2 番目の中括弧の実行後、obj2
変数name
とnationality
. そして、2回目に呼び出すobj1.display();
と、画面にゴミが表示されるはずです。
しかしobj1
、そうであってはならないにもかかわらず、コンストラクターで提供した正確な名前をまだ出力しています。
この動作を説明してください。