我创建的结构:
struct VideoSample
{
const unsigned char * buffer;
int len;
};
VideoSample * newVideoSample = new VideoSample;
newVideoSample->buffer = buf;
newVideoSample->len = size;
//...
现在如何删除它?
答案 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;
但是如果new
和delete
处于相同的上下文中,那么最好不要跳过它们而只是在堆栈上创建它:
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 ++中,struct
与class
相同,但使用默认的公共字段。
答案 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; * *