我有一个简单的类,bean创建了allot,在这个类中我写了一个中心文件 我用互斥锁保护文件,同时很少有类实例可以在同一时间进行写操作 我没有将文件引用作为参数传递给类 如果我在类中创建文件作为静态成员,那么它将被创建一次 好点吗 ? 这就是我现在所拥有的:
CollectorWorker::CollectorWorker()
{
m_pFileOutput = new QFile("my_result.txt");
if (!m_pFileOutput->open(QIODevice::WriteOnly
| QIODevice::Text | QIODevice::Append))
{
LOG_MSG("my_result.txt can't be open")
}
}
//header
QFile* m_pFileOutput;
或静态
QFile* CollectorWorker::m_pFileOutput = new QFile("my_result.txt");
CollectorWorker::CollectorWorker()
{
if (!m_pFileOutput->open(QIODevice::WriteOnly
| QIODevice::Text | QIODevice::Append))
{
LOG_MSG("my_result.txt can't be open")
}
}
//header
static QFile* m_pFileOutput;
答案 0 :(得分:1)
如果您需要由所有CollectWorker对象访问的类(或全局)文件指针,
我觉得奇怪的是你使用相同的文件 object 来引用多个CollectWorker实例引用同一个文件,每个实例都可能期望文件指针处于不同的状态,我认为这个只是要求麻烦..如果这是只读的,你最好远让每个CollectWorker只用自己的QFile指针打开同一个文件(非静态),保证它们都有自己的指针,更重要的是,在运行时文件中的读取偏移量。
答案 1 :(得分:0)
当一个类的所有成员都是静态的时,你就失去了主要的OOP想法。
您可以使用标题中定义的某些函数替换该类。
作为表演,我认为你不会注意到差异。
答案 2 :(得分:0)
这很好,甚至在你的情况下更喜欢。描述的情况中的文件是一个共享资源,应该被视为一个(这正是类static
在类范围内的意义)。拥有同一资源的多个句柄只会使代码混淆和复杂化。
但请注意,这在某种程度上限制了代码的灵活性 - 例如,如果您需要从类的不同实例访问不同的文件。