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

时间:2011-08-18 16:15:40

标签: c++

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

我应该在某个时候致电delete[] m_sFilename;吗?

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

4 个答案:

答案 0 :(得分:7)

  

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

  

为此:m_sFilename = new char [len+1];   我应该在某个时候拨打delete[] m_sFilename;吗?

  

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

delete[]


但你应该实际使用std::string,它会为你做这一切,并且是免费的。

答案 1 :(得分:4)

是的,如果您不希望new[]分配的内存泄漏,那么当您使用该内存时,您应该delete[]

为避免跟踪内存,建议您改用std::stringstd::vector

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

上面给出的行为是编译器/堆管理器(处理newdelete)依赖。为了获得更好的可移植性,请使用scaler delete for scaler new和vector delete(delete[])for vector new