![](/img/trans.png)
[英]Freeing memory with delete vs smart pointer and proper way of freeing memory
[英]Is this the proper way of freeing Pointer Memory in c++
这是一个例子,我为它是否是释放指针分配的内存的正确方法而感到震惊
char* functionTest()
{
char *a = new char[10];
return a;
}
int main()
{
char *b;
b=functionTest();
delete[] b;
return 0;
}
这是一个非常初学者的问题,但仍然想消除我的疑问。 编辑从删除到删除[]谢谢@sharptooth。 提前致谢。
技术上正确的C ++(目前为止,使用delete[]
进行编辑)
该代码将编译并运行而不会出现错误。
但是,在生产C ++代码中,您将很少使用new []和delete [],并且将更可能使用vector或对字符串进行字符串处理。
如果您确实想使用new []分配数组,则不妨使用boost :: shared_array来管理其删除。 失败的话,您可以使用shared_ptr,但是必须放入自己的调用delete []的删除器。
此技术称为RAII(资源获取即初始化),该技术可确保对于您分配的任何资源,无论随后发生了什么(包括可能引发的任何异常),您都已经在照顾它的后续处理。
这是对delete
和delete[]
之间区别的很好的技术描述: http : //blogs.msdn.com/b/oldnewthing/archive/2004/02/03/66660.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.