gpt4 book ai didi

c++ - 类中的文件声明应该是静态的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:20 25 4
gpt4 key购买 nike

我有一个由 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;

最佳答案

如果你想要一个类(或全局)文件指针被你需要的所有 CollectWorker 对象访问,

  1. 甚至在第一个 CollectWorker 对象的构建之外对其进行初始化。类静态 Init() 成员(和匹配的 Close())会执行此操作。
  2. 如果是单线程,您可以在构造函数中按需创建它,方法是检查文件指针以查看它是否已经创建和打开,只有在没有创建和打开的情况下才这样做
  3. 如果是多线程,您需要一个类级互斥锁,它可以在构造函数输入时锁存,检查指针,只有当它为 NULL 时才创建它,然后解锁互斥锁。

我认为您使用同一个文件 object 由多个 CollectWorker 实例引用同一个文件很奇怪,每个 CollectWorker 实例都可能期望文件指针处于不同状态,我认为这只会自找麻烦.. 如果这是只读的,你最好让每个 CollectWorker 用它们自己的 QFile 指针(非静态)打开同一个文件,保证他们都有自己的指针,更重要的是,在运行时在文件中读取偏移量。

关于c++ - 类中的文件声明应该是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13190848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com