デストラクタに関連するいくつかの疑問があります。
class cls
{
char *ch;
public:
cls(const char* _ch)
{
cout<<"\nconstructor called";
ch = new char[strlen(_ch)];
strcpy(ch,_ch);
}
~cls()
{
//will this destructor automatically delete char array ch on heap?
//delete[] ch; including this is throwing heap corruption error
}
void operator delete(void* ptr)
{
cout<<"\noperator delete called";
free(ptr);
}
};
int main()
{
cls* cs = new cls("hello!");
delete(cs);
getchar();
}
また、デストラクタは削除時に自動的に呼び出されるため、すべてのロジックをデストラクタで記述できるのに、なぜ明示的な削除が必要なのですか?
演算子の削除とデストラクタに関して非常に混乱しており、特定の使用法を理解できませんでした。詳しい説明大変参考になります。
編集: 答えに基づく私の理解:この特定のケースでは、デフォルトのデストラクタが char ポインタを破損するため、最初に char 配列を明示的に削除する必要があります。そうしないと、メモリ リークが発生します。間違っている場合は修正してください。