C ++如何删除结构?

时间:2010-11-09 13:47:49

标签: c++ structure

我创建的结构:

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

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

       //...

现在如何删除它?

11 个答案:

答案 0 :(得分:22)

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提及它:)

答案 1 :(得分:7)

delete newVideoSample;

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

VideoSample newVideoSample = {buf, size};

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

答案 2 :(得分:3)

您正在寻找delete关键字:

delete newVideoSample;

答案 3 :(得分:3)

delete newVideoSample;

但是,请考虑使用会自动释放内存的smart pointer,例如:

std::auto_ptr<VideoSample> newVideoSample(new VideoSample);

答案 4 :(得分:2)

除非我遗漏了某些内容,否则您只需使用delete

delete newVideoSample;

答案 5 :(得分:2)

delete newVideoSample。 在C ++中,structclass相同,但使用默认的公共字段。

答案 6 :(得分:2)

使用delete

VideoSample * newVideoSample = new VideoSample;
//.. stuffs

delete newVideoSample;

还有一个overload,即delete[]

VideoSample * newVideoSample = new VideoSample[n];
//.. stuffs

delete [] newVideoSample;

在Modern C ++中,始终建议使用智能指针。您可能希望使用boost库中的boost::shared_ptr<T>

答案 7 :(得分:2)

如果您希望VideoSample释放其buffer成员,则VideoSample是一个脆弱的类。它无法知道buf是使用new[]还是malloc在堆中创建的,还是堆栈中变量的地址。

答案 8 :(得分:2)

在C ++中,结构与类完全相同,但默认情况下一切都是公共的,默认情况下类是私有的。因此,一个结构可以有一个析构函数,并通过delete释放。

答案 9 :(得分:1)

要分配 - &gt;     VideoSample * newVideoSample = new VideoSample;

要删除 - &gt;     删除newVideoSample;

如果在同一上下文中删除对象,最好将其分配到堆栈中。 如果您在上下文之外删除它,请不要忘记传递引用。

最重要的是,如果您要退出流程,请不要删除,这是毫无意义的:P

答案 10 :(得分:0)

* *您创建了Videosample的对象,因此您只需使用delete ..

VideoSample * newVideoSample = new VideoSample;    删除newVideoSample; * *