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

4

这是一个例子,我在思考是否释放指针分配的内存的正确方式。

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

这是一个非常初级的问题,但我仍然想要解决我的疑惑。 经@sharptooth的提醒,从delete更改为delete[]。 谢谢您提前的帮助。

最好在C++中使用std :: string ;) - Matěj Zábský
@mzabsky,我尝试使用它,但有时无法容纳大字符串大小,不知道为什么,但会尝试找出原因。所以我使用了我需要的char数组大小:),感谢您的建议。 - Pritesh Jain
根据我现在的理解,使用 new[] 为函数分配内存,并使用 delete[] 进行调用以释放内存,在技术上是正确的。不过,在实际生产代码中很少使用 new[] 和 delete[]。 - CashCow
@CashCow,在实际的生产代码中很少使用new[]和delete[]是正确的。这是否意味着我应该使用std:string代替它? - Pritesh Jain
如果你正在处理字符串,那么使用std::string来处理ASCII/UTF-8编码,使用std::wstring来处理UTF-16编码。对于一般的“数组”操作,你应该使用vector。 - CashCow
@CashCow .. 谢谢,我一定会尝试的 :) - Pritesh Jain
2个回答

4

从技术上讲,这段代码是正确的(使用delete[]进行编辑)。

即使没有错误,但在实际的C++生产代码中,您很少使用new[]和delete[],更有可能使用vector,或者对于字符串处理使用string。

如果您真的想使用new[]分配数组,那么最好使用boost::shared_array来管理其删除。否则,您可以使用shared_ptr,但必须放入自己的删除器来调用delete[]。

这种技术称为RAII(资源获取即初始化),它确保您为分配的任何资源已经处理了其后续处理,而不管随后发生了什么事情(包括可能抛出的任何异常)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接