我应该为应用程序实现一个记录器,我应该使用单例模式。此外,由于此应用程序是多线程的,因此该记录器应该是线程安全的。我想指出我必须使用 C ++ 03 。
我使用QMutex
静态对象在C ++ / QT中看到this implementation of singleton pattern,以保证只有一个线程分配单个对象的唯一实例。
为什么每个人都将单例作为指针返回?我会将它作为参考返回,所以我不应该担心显式释放单例对象使用的内存。我阅读了this answer和this other answer,并编写了以下实现。
// ==========
// Logger.h
#include <QMutex>
#include <QString>
class Logger
{
public:
static Logger& instance();
void configure(const QString& folder);
private:
Logger();
Logger(const Logger&);
Logger& operator=(const Logger&);
private:
mutable QMutex _mutex;
QString _folder;
};
// ==========
// Logger.cpp
Logger::Logger() : _mutex() { ; }
Logger& Logger::instance()
{
static QMutex mutex;
mutex.lock();
static Logger instance;
mutex.unlock();
return instance;
}
void Logger::configure(const QString& folder)
{
_mutex.lock();
_folder = folder;
_mutex.unlock();
}
我有一些问题......
instance()
是否是线程安全的?