"new char[]"是否需要手动释放资源?

Does "new char[]" need to be release resources manually?

本文关键字:释放资源 是否 new char      更新时间:2023-10-16

对于这个:m_sFilename = new char [len+1];

我应该找个时间打电话给delete[] m_sFilename;吗?

:

我应该用delete[] m_sFilename还是delete m_sFilename; ?

"new char[]"需要手动释放资源吗?

是的。

对于这个:m_sFilename = new char [len+1];我应该找个时间给delete[] m_sFilename;打电话吗?

是的。

我应该使用delete[] m_sFilename还是delete m_sFilename; ?

delete[] .


但是您应该实际上使用std::string,它为您完成了所有这些,并且是免费的。

是的,如果您不希望由new[]分配的内存泄漏,您应该在使用该内存时将其delete[]

为了避免跟踪内存,我建议您使用std::stringstd::vector来代替。

是的,但是使用std::string来存储m_sFilename -它在几乎所有方面都更好。

对于本机数据类型和用户定义的数据类型,使用deletedelete[]没有析构函数意味着相同的。底层堆管理器将释放所有内存。但是在vector new (new[])上调用标量delete不会使所有析构函数都被调用。对于第一个对象,析构函数只被调用一次。

上面给出的行为依赖于编译器/堆管理器(它正在处理newdelete)。为了更好的可移植性,对于标量new使用标量delete,对于向量new使用向量delete (delete[])。