Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让奥斯特雷姆开着 我在C++程序中创建了一个记录器。根据下面的代码,我是否应该注意任何问题?我主要关心的是让ostream在程序运行期间保持打开状态,并通过不干净的方法退出程序,例如,将x'ing移出控制台窗口。系统是否会在程序退出后保持文件的打开状态,或者是否会在终止时销毁ostream对象而不使用Log::Close函数_C++_Ostream - Fatal编程技术网

让奥斯特雷姆开着 我在C++程序中创建了一个记录器。根据下面的代码,我是否应该注意任何问题?我主要关心的是让ostream在程序运行期间保持打开状态,并通过不干净的方法退出程序,例如,将x'ing移出控制台窗口。系统是否会在程序退出后保持文件的打开状态,或者是否会在终止时销毁ostream对象而不使用Log::Close函数

让奥斯特雷姆开着 我在C++程序中创建了一个记录器。根据下面的代码,我是否应该注意任何问题?我主要关心的是让ostream在程序运行期间保持打开状态,并通过不干净的方法退出程序,例如,将x'ing移出控制台窗口。系统是否会在程序退出后保持文件的打开状态,或者是否会在终止时销毁ostream对象而不使用Log::Close函数,c++,ostream,C++,Ostream,我的思路是:当我可以打开它一次,然后在出口时关闭它时,为什么要一遍又一遍地打开/关闭它 #ifndef LOG_HPP #define LOG_HPP #include <fstream> namespace Log { static const char* File = "Logs\\Log.log"; static std::ofstream Log; void Initialize() { Log.open(File, st

我的思路是:当我可以打开它一次,然后在出口时关闭它时,为什么要一遍又一遍地打开/关闭它

#ifndef LOG_HPP
#define LOG_HPP

#include <fstream>

namespace Log
{
    static const char* File = "Logs\\Log.log";
    static std::ofstream Log;

    void Initialize()
    {
        Log.open(File, std::ios::app);
    }

    void Record(const char* Message)
    {       
        Log << Message;
    }

    void Close()
    {
        Log.close();
    }

}; // namespace Log

#endif

< > C++标准没有定义当您通过不干净的方法退出程序时发生什么,即从控制台窗口退出X/EP。 然而,它确实定义了当您调用时的预期

调用中声明的函数std::abort终止程序,而不执行任何析构函数,也不调用传递给std::atexit或std::at_quick_exit的函数

不干净地退出程序最有可能的结果是调用std::abort时看到的结果

系统是否会在程序退出后保持文件打开


即使在干净地退出程序时被调用的对象的析构函数不会在异常终止时被调用,操作系统也很可能会关闭打开的文件句柄。至少我在Windows和Linux中观察到了这一点。如果有与输出文件/流相关联的未刷新的缓冲区,则不会看到它们被刷新。

< P> C++标准没有定义当您通过不干净的方法退出程序时发生的事情,即从控制台窗口退出。 然而,它确实定义了当您调用时的预期

调用中声明的函数std::abort终止程序,而不执行任何析构函数,也不调用传递给std::atexit或std::at_quick_exit的函数

不干净地退出程序最有可能的结果是调用std::abort时看到的结果

系统是否会在程序退出后保持文件打开

即使在干净地退出程序时被调用的对象的析构函数不会在异常终止时被调用,操作系统也很可能会关闭打开的文件句柄。至少我在Windows和Linux中观察到了这一点。如果有任何未刷新的缓冲区与输出文件/流关联,您将不会看到它们被刷新

系统是否会在程序退出后保持文件打开

不!程序退出后,如果它以正常方式退出,或者将被任何操作系统命令或控制台控制序列终止,程序的几乎所有资源都将被释放

据我所知,唯一没有完全删除的资源是命名管道。正常的文件句柄肯定会被删除

但是: 最后一个缓冲区内容可能不会写入磁盘上的物理文件或写入到任何位置。因此,在每次写入之后直接刷新将是一个好主意

系统是否会在程序退出后保持文件打开

不!程序退出后,如果它以正常方式退出,或者将被任何操作系统命令或控制台控制序列终止,程序的几乎所有资源都将被释放

据我所知,唯一没有完全删除的资源是命名管道。正常的文件句柄肯定会被删除

但是:
最后一个缓冲区内容可能不会写入磁盘上的物理文件或写入到任何位置。因此,在每次写入之后直接刷新将是一个好主意

我不会太在意关闭的文件句柄。正如克劳斯所说,更重要的是在编写每条消息后刷新流。 在Windows上,您始终可以使用SEH框架、\uuuu try/\uu finally block。无论您如何退出uuu try,uuu最终将被执行,即使是在抛出或返回之后。我希望您使用try/catch获得类似的结果,只是不要在try块中使用return。或者看看这里:

我不会太在意关闭的文件句柄。正如克劳斯所说,更重要的是在编写每条消息后刷新流。 在Windows上,您始终可以使用SEH框架、\uuuu try/\uu finally block。无论您如何退出uuu try,uuu最终将被执行,即使是在抛出或返回之后。我希望您使用try/catch获得类似的结果,只是不要在try块中使用return。或者看看这里:
我在C++程序中创建了一个记录器。根据下面的代码,我是否应该注意任何问题?考虑一下这个问题。这似乎是一个可回答的、特定的编程问题,它是关于堆栈溢出的主题。这意味着将.h文件包含到多个模块库中,使每个库都有自己的记录器。在这种情况下,一个文件将有多个写入程序。这会导致错误的日志文件content@atrelinski所有内容都会通过Message.hpp,在Message.hpp中,在
在多线程应用程序中,当不同线程同时调用记录时,也会出现问题。C++程序中创建了记录器。根据下面的代码,我是否应该注意任何问题?考虑一下这个问题。这似乎是一个可回答的、特定的编程问题,它是关于堆栈溢出的主题。这意味着将.h文件包含到多个模块库中,使每个库都有自己的记录器。在这种情况下,一个文件将有多个写入程序。这会导致错误的日志文件content@atrelinski所有内容都通过Message.hpp传递,在控制台的流之后调用记录器。在多线程应用程序中,当不同线程同时调用Record时,也会出现问题。