C++如何删除结构?

Rel*_*lla 16 c++ structure

我创建的结构:

   struct VideoSample
  { 
      const unsigned char * buffer;
      int len;
  };

   VideoSample * newVideoSample = new VideoSample;
   newVideoSample->buffer = buf;
   newVideoSample->len = size;

       //...
Run Code Online (Sandbox Code Playgroud)

现在怎么删除呢?

Ama*_*osh 25

delete newVideSample;
Run Code Online (Sandbox Code Playgroud)

这不会释放您分配给的任何内存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;
Run Code Online (Sandbox Code Playgroud)

通常,这种释放是在类的析构函数中编写的,以便delete在动态创建的对象时自动调用它.

谢谢@steve提到它:)

  • 这值得 -1 - 在不知道内存来自哪里的情况下使用“free”,并且如果设置了指针,则不建议在析构函数中完成此操作。不投反对票,因为没有其他答案提到这一点。 (2认同)

asc*_*ler 7

delete newVideoSample;
Run Code Online (Sandbox Code Playgroud)

但是如果newdelete它们处于相同的上下文中,那么最好不要跳过它们而只是在堆栈上创建它:

VideoSample newVideoSample = {buf, size};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不需要清理.