私が作成した構造:
struct VideoSample
{
const unsigned char * buffer;
int len;
};
VideoSample * newVideoSample = new VideoSample;
newVideoSample->buffer = buf;
newVideoSample->len = size;
//...
今すぐ削除するにはどうすればよいですか?
delete newVideSample;
ただし、newVideoSample->buffer
に割り当てたメモリは解放されません。削除する前に明示的に解放する必要があります。
//Free newVideSample->buffer if it was allocated using malloc
free((void*)(newVideSample->buffer));
//if it was created with new, use `delete` to free it
delete newVideSample->buffer;
//Now you can safely delete without leaking any memory
delete newVideSample;
通常、この種の解放はクラスの destructor に書き込まれるため、動的に作成されたオブジェクトをdelete
したときに自動的に呼び出されます。
言及してくれてありがとう@steve :)
delete newVideoSample;
しかし、new
とdelete
が同じコンテキストにある場合は、それらをスキップして、代わりにスタックに作成する方がよいでしょう。
VideoSample newVideoSample = {buf, size};
その場合、クリーンアップは必要ありません。
あなたはdelete
キーワードを探しています:
delete newVideoSample;
delete newVideoSample;
ただし、メモリを自動的に解放する スマートポインタ の使用を検討してください。次に例を示します。
std::auto_ptr<VideoSample> newVideoSample(new VideoSample);
VideoSampleがbuffer
メンバーを解放することを意図した場合、VideoSampleは壊れやすいクラスです。 buf
がnew[]
またはmalloc
を使用してヒープ内に作成されたか、スタック上の変数のアドレスであるかを知る方法はありません。
C++では、構造はクラスとまったく同じですが、デフォルトではすべてがパブリックであり、クラスはデフォルトでプライベートです。したがって、構造体はデストラクタを持つことができ、削除によって解放されます。
私が何かを逃していない限り、あなたはdelete
を使うだけです:
delete newVideoSample;
delete newVideoSample
。 C++では、struct
はclass
と同じですが、デフォルトのパブリックフィールドがあります。
割り当てるには-> VideoSample * newVideoSample = new VideoSample;
削除するには-> delete newVideoSample;
同じコンテキストでオブジェクトを削除する場合は、スタックに割り当てる方がよいでしょう。コンテキスト外で削除する場合は、参照を渡すことを忘れないでください。
そして最も重要なのは、プロセスを終了しようとしている場合は削除しないでください、それは無意味です:P
* * Videosampleのオブジェクトを作成するので、削除を使用します。
VideoSample * newVideoSample = new VideoSample;削除newVideoSample; * *