这是在c ++中释放指针内存的正确方法吗?

时间:2011-02-11 08:09:31

标签: c++

这是一个例子,我很惊讶它是否是一种释放指针分配内存的正确方法

char* functionTest()  
{  
    char *a = new char[10];  
    return a;  
}  
int main()  
{  
    char *b;  
    b=functionTest();  
    delete[] b;  
    return 0;  
}

这是一个非常初学的问题,但仍想澄清我的怀疑。 从删除编辑删除[]谢谢@sharptooth。 提前谢谢。

2 个答案:

答案 0 :(得分:4)

技术上正确的C ++(截至目前使用delete[]进行编辑)

代码编译运行没有错误。

但是在生产C ++代码中,你很少使用new []和delete [],并且更有可能使用vector,或者字符串处理使用string。

如果你真的想用new []分配一个数组,你可能希望使用boost :: shared_array来管理它的删除。如果你没有使用shared_ptr但是必须放入你自己的删除调用delete []。

这种技术称为RAII(资源获取是初始化),它确保对于您分配的任何资源,无论后续发生什么(包括可能引发的任何异常),您都已经在处理其后续处置。

答案 1 :(得分:0)

以下是对deletedelete[]之间差异的精彩技术说明: http://blogs.msdn.com/b/oldnewthing/archive/2004/02/03/66660.aspx