为此:
m_sFilename = new char [len+1];
我应该在某个时候致电delete[] m_sFilename;
吗?
和
我应该使用delete[] m_sFilename
还是delete m_sFilename;
?
答案 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::string
或std::vector
。
答案 2 :(得分:2)
是的,但请使用std::string
来存储m_sFilename
- 而且几乎在所有方面都更好。
答案 3 :(得分:0)
对于本机数据类型,没有使用delete
或delete[]
的析构函数的用户定义数据类型意味着相同。底层堆管理器将释放所有内存。但是,在向量new(delete
)上调用scaler new[]
将不会调用所有析构函数。对于第一个对象,析构函数只会被调用一次。
上面给出的行为是编译器/堆管理器(处理new
和delete
)依赖。为了获得更好的可移植性,请使用scaler delete for scaler new和vector delete(delete[]
)for vector new
。