私は、デストラクタクラスの機能とメモリ割り当て解除に及ぼす影響の挙動を解析するためにこれを書いたが、結果は私には少し意外であるように思わ:デフォルトのデストラクタV.S.単純に定義されたデストラクタ
class test {
public:
test() {}
~test() {} //<-----Run the program once with and once without this line.
};
int main()
{
test x;
test *a(&x);
cout << "a before memory allocation: " << a << endl;
a = new test;
cout << "a after memory allocation and before delete: " << a << endl;
delete a;
cout << "a after delete: " << a << endl;
return 0;
}
デフォルトのデストラクタで結果は: 私自身のデストラクタで: 2番目の結果は間違っていませんか?
解除機能が無効に割り当て解除ストレージの任意の部分を参照するすべてのポインタをレンダリングポインタ、が参照するストレージの割り当てを解除しなければならない。どこかに私はそれを読んでいるので。
多分私はそれを正しくフォローしていないでしょう(特に難しい英語の単語が使われているためです)。なぜこれが起こっているのですか教えてください。 私の単純に定義されたデストラクタとC++のデフォルトデストラクタの違いは何ですか? ご協力いただきありがとうございます。
ポインタが同じままであるという事実は、ストレージが割り当て解除されているという事実と矛盾しません。これは再使用可能なメモリであり、削除したばかりのポインタを使用してこのメモリにアクセスすることは自分の責任です。 – Gerriet
@Gerriet例を挙げますか?ありがとうございました。 –
デフォルトのデストラクタでポインタの変更を再現することはできません:http://ideone.com/vg3TYD – UnholySheep