"new char[]"是否需要手动释放资源?
Does "new char[]" need to be release resources manually?
对于这个: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::string
或std::vector
来代替。
是的,但是使用std::string
来存储m_sFilename
-它在几乎所有方面都更好。
对于本机数据类型和用户定义的数据类型,使用delete
或delete[]
没有析构函数意味着相同的。底层堆管理器将释放所有内存。但是在vector new (new[]
)上调用标量delete
不会使所有析构函数都被调用。对于第一个对象,析构函数只被调用一次。
上面给出的行为依赖于编译器/堆管理器(它正在处理new
和delete
)。为了更好的可移植性,对于标量new使用标量delete,对于向量new
使用向量delete (delete[]
)。
相关文章:
- C++ 返回异常,我应该释放资源吗?
- 提升 MPI 在侦听列表时不释放资源?
- 如果我在C++中分配一个带有运算符 new[] 的对象数组,但单独释放它们是否仍然构成内存泄漏
- 通过C接口分配和释放资源的正确习惯用法
- 正在从D3D挂钩释放资源
- 如果通过委托给“malloc”的重载“new[]”分配,“释放”内存是否安全
- 指向调用类的构造函数的资源是否安全?
- 如何从shared_ptr资源管理器释放资源
- boost:scoped_ptr to boost::p tr_vector 而不释放资源
- 使用 C++/WinAPI 在对话窗口中释放资源的相应消息是什么?
- Qt UI生成器不会释放资源
- Curl_easy_cleanup不会释放资源
- 为什么OpenGL在创建/释放资源时使用指向资源id的指针
- 在不同的线程上安全地释放资源
- "new char[]"是否需要手动释放资源?
- 自动释放资源的通用句柄
- 在c++程序中,分配内存然后释放内存是否构成副作用?
- 使用信号处理程序释放资源
- 用于释放资源的异常处理的替代方法
- 从不同类型的指针释放内存是否安全