参考内容
单例模式:懒汉模式(有锁+智能指针)
#include <memory>
#include <mutex>
class SRIO {
public:
SRIO& operator=(const SRIO&) = delete;
SRIO(SRIO&) = delete;
~SRIO() {
std::cout << "deconstruter" << std::endl;
}
public:
static std::shared_ptr<SRIO> getSRIO() {
if (m_SRIO == nullptr) {
std::lock_guard<std::mutex> lk(m_mutex);
if (m_SRIO == nullptr) {
m_SRIO = std::shared_ptr<SRIO>(new SRIO);
}
}
return m_SRIO;
}
private:
SRIO() {
std::cout << "constroctor" << std::endl;
}
static std::shared_ptr<SRIO> m_SRIO;
static std::mutex m_mutex;
};
std::shared_ptr<SRIO> SRIO::m_SRIO = nullptr;
std::mutex SRIO::m_mutex;
int main() {
std::shared_ptr<SRIO> s=SRIO::getSRIO();
std::shared_ptr<SRIO> s2 = SRIO::getSRIO();
return 0;
}
最推荐的懒汉式单例(magic static )——局部静态变量
class SRIO {
public:
SRIO& operator=(const SRIO&) = delete;
SRIO(SRIO&) = delete;
~SRIO() {
std::cout << "deconstruter" << std::endl;
}
public:
static SRIO& getSRIO() {
static SRIO instance;
return instance;
}
private:
SRIO() {
std::cout << "constroctor" << std::endl;
}
};
int main() {
SRIO& s=SRIO::getSRIO();
SRIO& s2 = SRIO::getSRIO();
return 0;
}