-1

動的メモリの割り当て/割り当て解除を行う「Byte」というクラスがありますが、問題が発生しています。デストラクタのどこで解放するかわかりませんか?またはfree()のような新しい関数をコーディングします

説明させてください。

Byte string; // Default constructor created a heap saved in a private variable in class.

void assignsomething()
{
string += "Blabla"; // Created a block of memory
string += " Blabla2"; // Added data again.

} // if I write a destructor that free heap with HeapDestroy() i can't use data in main()

int main()
{
  assignsomething();
  MessageBoxA(0,string,0,0);
  // Byte.HeapFree(); 
}

さて...デストラクタが呼び出す場所を設定することは可能ですか?または、クラスが終わったら無料で電話する必要がありますか?前もって感謝します。ハッピーコーディング。

4

2 に答える 2

1

スタック上に作成する場合(newを介して作成しない場合)、スコープ外になるとデストラクタが自動的に呼び出されます。newで作成する場合は、使い終わったら演算子deleteを使用して自分で解放する必要があります。その上でfree()を呼び出さないでください。new演算子とdelete演算子を使用してください。デストラクタを手動で呼び出そうとしないでください。削除を使用するだけです。

そして、はい、クラスの外部にポインタがない限り、デストラクタはクラスに残っている動的に割り当てられたすべてのメモリを解放する必要があります。そうしないようにしてください。メモリ管理が難しくなり、一般的に悪い設計と見なされます。

于 2013-01-24T04:17:47.090 に答える
0

コンストラクタではメモリを取得し、デストラクタではメモリを解放します。ローカル変数または静的変数を使用すると自動化されますが、「新規」の場合は、「無料」または「削除」などを使用して、メモリのこの部分が現在は役に立たないことをオペレーティングシステムに通知する必要があります。それを取り戻すことができます

于 2013-01-24T04:59:14.277 に答える