应用中的全局计数器:错误做法? 在我的C++应用程序中,有时我会创建不同的输出文件来解决故障。每个文件都是在流水线操作的不同步骤中创建的,很难知道文件在哪个文件之前出现(文件时间戳都显示相同的日期)

应用中的全局计数器:错误做法? 在我的C++应用程序中,有时我会创建不同的输出文件来解决故障。每个文件都是在流水线操作的不同步骤中创建的,很难知道文件在哪个文件之前出现(文件时间戳都显示相同的日期),c++,global-variables,C++,Global Variables,我正在考虑在我的应用程序中添加一个全局计数器和一个函数(具有多线程保护),该函数递增并返回该全局计数器。然后我可以使用该计数器作为我创建的文件名的一部分 这被认为是不好的做法吗?许多不同的模块需要创建文件,它们之间不一定相互连接。一般来说,这不是一个坏做法 在C++中,我将编写一个包含计数器和多线程保护的单级类。这将更加简洁,并避免像在c中那样使用全局变量(您将使用类静态变量)。我将亲自为这些文件创建一个工厂,负责返回文件对象。您可以让该函数(或类)为计数器设置一个静态变量。如果它只是用于调试,

我正在考虑在我的应用程序中添加一个全局计数器和一个函数(具有多线程保护),该函数递增并返回该全局计数器。然后我可以使用该计数器作为我创建的文件名的一部分


这被认为是不好的做法吗?许多不同的模块需要创建文件,它们之间不一定相互连接。

一般来说,这不是一个坏做法


在C++中,我将编写一个包含计数器和多线程保护的单级类。这将更加简洁,并避免像在c中那样使用全局变量(您将使用类静态变量)。

我将亲自为这些文件创建一个工厂,负责返回文件对象。您可以让该函数(或类)为计数器设置一个静态变量。

如果它只是用于调试,是临时的,并且不会被释放,您可以做任何最快速、最简单的事情


另一方面,如果它可能长期存在于您的应用程序中,并可能潜入发行版中,那么我肯定会花更多的时间编写一个基本的文件创建模块,您的所有其他模块都可以访问该模块。

我通常会放弃任何类型的全局变量,转而使用静态成员变量。它们执行相同的功能,您可以限制如何更改和访问静态成员。

我认为,以足够高的精度将当前系统时间添加到文件名中会更干净,更易于实现和维护

//helper function to encapsulate details
string makeFileName(string filename)
{ return filename + getCurrentTime(); }

void MyClass::SomeMethod()
{
   File f = CreateFile(makeFileName("myclassfile"));
   ...
}

这个单例类是否有一个静态的
实例
方法来返回单例?如果是这样的话,那么它就像其他任何东西一样是全局的。这就是我通常处理日志的方式。它还使提供标准文件名变得更容易,并确保所有文件都位于同一位置。他提到,该变量将通过函数访问,而不仅仅是原始
extern int fileCount抛出在一些include文件的顶部。考虑到他所需要做的只是增加它的数量并返回一份副本,这可能就足够了。