c++ - ofstream - 需要在 close() 操作后删除对象句柄吗?

标签 c++ memory io iostream

我有一个简单的问题。我有一个要写入数据的 ofstream。完成并调用 close() 后,我需要在句柄上调用 delete 还是 close() 执行清理?

例如:

mFileStream = new std::ofstream(LogPath.c_str(), std::ios::trunc);
...
mFileStream->Close();
//delete mFileStream? 

我的直觉是肯定的,因为我已经分配了它,但我不确定我在哪里读到它。谁能解释一下?

最佳答案

是的,你必须这样做。在 C++ 中,您必须将 newdelete 配对。

虽然,在像这样的简单情况下您不需要,您可以在堆栈上分配您的对象,它会为您销毁,强烈建议这样做(更快更安全):

{ // enclosing scope (function, or control block)
    ofstream mFileStream(LogPath.c_str(), std::ios::trunc); 
    ... 
    mFileStream.close(); // mFileStream is not a pointer any more, use the "." operator
    // mFileStream destroyed for you here. "close" may even be called for you.
}

小提示:close带有一个小“c”。

关于c++ - ofstream - 需要在 close() 操作后删除对象句柄吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541897/

相关文章:

c++ - opengl中灯光的区别

java - 用Java管理大矩阵的正确方法

c++ - 将 __attribute__ 与 typedef 结合使用

c++ - 段错误(核心转储)- 具有多维 vector 的循环 C++98

c++ - 之后填充 std::unique_ptr

java - 你能在java中访问用c++创建的指针吗

java - 创建文件夹有效,但权限未继承

c++ - 我希望 cin 读取到 '\n' 但我不能使用 getline

python - 将 io.StringIO 转换为 io.BytesIO

c++ - CGAL 二次规划包找到不正确的解决方案