#include<iostream>
#include<string>
using namespace std;
class Human{
private:
int *age;
string *name;
public:
Human(string iname,int iage)
{
name=new string;
age=new int;
*name=iname;
*age=iage;
}
void display()
{
cout<<"Name "<<*name<<endl<<"Age "<<*age<<endl;
}
~Human(){
delete name;
delete age;
cout<<"Released all memories"<<endl;
}
};
int main()
{
Human *pallavi= new Human("pallavi",21);
pallavi->display();
delete pallavi;
pallavi->display();
return 0;
}
私は、クラスHumanのオブジェクトを作成する簡単なプログラムを書いています。デストラクタは、データ変数、すなわち、int ageおよびstring nameの両方を削除するように指定される。しかし、(「パラヴィを削除」)デストラクタを呼び出し、再度変数を表示するには、私が受け取る出力は次のようになります。
C++デストラクタがメモリを解放する
名前
年齢21もちろん
は、全体の出力は以下です:
名前パラヴィ
年齢21
リリースすべての思い出
名前
年齢21
私の質問は、デストラクタがメモリを解放すべきではないですか?それは、オブジェクトを2度表示すると(デストラクタを呼び出した後に)、名前と年齢がガベージ値を表示するはずですか? Nameに21の値が表示され、21に値が表示されないのはなぜですか?
メンバー変数にポインタを使用する必要はありません。ちょうど 'int'と' string'とタイプするだけです。 – Sean
ちょうど開発を開始し、古いコンパイラを使用しない場合は、[スマートポインタ](http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-when-should -i-use-one) – Garf365
[C++ deleteの複製が可能です - オブジェクトを削除しますが、それでもデータにアクセスできますか?](http://stackoverflow.com/questions/1930459/c-delete-it-deletes-myデータにアクセスすることはできますが、オブジェクトにアクセスできます) –