次のコードがあります。デストラクタがC++で実行されていません
#include <string.h>
#include <iostream>
using namespace std;
class Fred
{
private:
char* _cptr;
public:
Fred()
{
_cptr = new char[strlen("Hello World") + 1];
strcpy(_cptr, "Hello World");
}
~Fred()
{
cout << "Fred::~Fred(): " << _cptr << endl;
delete _cptr;
}
void Display() const
{
cout << "Fred::Display() _cptr: " << _cptr << endl;
}
};
int main()
{
Fred* p = new Fred();
if (p == NULL)
cout << "fail" << endl;
p->Display() ;
p = NULL;
delete p;
getchar();
return 0;
}
OUTPUT フレッド::ディスプレイ()_cptr:Hello Worldの 009A02D8
int main()
{
Fred* p = new Fred();
if (p == NULL)
cout << "fail" << endl;
p->Display() ;
//p = NULL;
delete p;
getchar();
return 0;
}
OUTPUT フレッド::ディスプレイ()_cptr:Hello Worldの フレッド::〜フレッド():こんにちは世界
デストラクタがファーストケース(p = NULL)で動作していない理由についてのアイデア。
おかげで最初のケースで MAP
次の行を切り替えます。 'p = NULL; delete p; '' NULLを削除する ';はNOPで、元のインスタンスを漏らしています。 –
なぜでしょうか? 'new'によって返されたポインタを削除していません。 –
は「close typo」投票に同意していません - 私はOPが意図的にこのようにコードを書いており、その意味を理解していないようです。 –