简体   繁体   English

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

[英]Does “new char[]” need to be release resources manually?

For this: m_sFilename = new char [len+1]; 为此: m_sFilename = new char [len+1];

Should I call delete[] m_sFilename; 我应该调用delete[] m_sFilename; sometime? 什么时间?

And: 和:

should I use delete[] m_sFilename or delete m_sFilename; 我应该使用delete[] m_sFilename还是delete m_sFilename; ?

Does "new char[]" need to be release resouces manually? “new char []”是否需要手动释放资源?

Yes. 是。

For this: m_sFilename = new char [len+1]; 为此: m_sFilename = new char [len+1]; Should I call delete[] m_sFilename; 我应该调用delete[] m_sFilename; sometime? 什么时间?

Yes. 是。

Should I use delete[] m_sFilename or delete m_sFilename; 我应该使用delete[] m_sFilename还是delete m_sFilename; ?

delete[] . delete[]


But you should actually use std::string , which does all this for you, and is free. 但是,你应该实际使用std::string ,这所有的这一切对你来说,是免费的。

Yes, if you don't want the memory allocated by the new[] to leak, you should delete[] it when you're done using that memory. 是的,如果您不希望new[]分配的内存泄漏,则在使用该内存时应delete[]

To avoid having to keep track of that memory, I recommend you use std::string or std::vector instead. 为了避免跟踪内存,我建议您使用std::stringstd::vector

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

For native data types, and user-defined data types not having destructors using delete or delete[] would mean the same. 对于本机数据类型,没有使用deletedelete[]析构函数的用户定义数据类型意味着相同。 The underlying heap manager would free all of the memory. 底层堆管理器将释放所有内存。 But calling scaler delete over a vector new ( new[] ) will not make all destructors to be called. 但是在向量new( new[] )上调用scaler delete不会使所有析构函数都被调用。 Destructor will be called only once for the very first object. 对于第一个对象,析构函数只会被调用一次。

The behavior given above is compiler/heap-manager (which is handling new and delete ) dependent. 上面给出的行为是依赖于编译器/堆管理器(处理newdelete )。 For better portability use scaler delete for scaler new and vector delete ( delete[] ) for vector new . 为了更好的可移植性,使用scaler delete for scaler new和vector delete( delete[] )for vector new

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM