应用中的全球反击:不良做法?

时间:2010-05-12 18:47:32

标签: c++ global-variables

在我的C ++应用程序中,我有时会创建不同的输出文件以进行故障排除。每个文件都是在我们的流水线操作的不同步骤创建的,并且很难知道文件来自哪个文件(文件时间戳都显示相同的日期)。

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

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

5 个答案:

答案 0 :(得分:4)

如果它仅用于调试,是暂时的,并且不会被释放,你可以做任何最快和最简单的事情。

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

答案 1 :(得分:2)

一般来说,这并不坏。

在C ++中,我会编写一个包含计数器和多线程保护的单例类。这样会更干净,并且会避免像使用c那样使用全局变量(你会使用类静态变量)。

答案 2 :(得分:2)

我认为,以足够高的精度添加文件名当前系统时间将更清晰,更容易实现和维护

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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