참고 블로그: http://vallista.tistory.com/entry/1-Singleton-Pattern-in-C
어차피 간단한 수준의 프로젝트를 수행하기 때문에 전부 다 읽고 구현할 필요는 없고,
메모리 해제를 고려하지 않은 Dynamic singleton에 대해서만 소개한다.
전역변수 방법 또는 singleton 방법으로 예제를 돌릴 때 각각 uncomment해야 하는 코드가 다르므로 주의하여 돌려보자.
//main.cpp
#include <iostream>
#include "CWrite.h"
#include "CRead.h"
int main()
{
CWrite* pWrite = new CWrite();
CRead* pRead = new CRead();
pWrite->WriteToData("hello!");
pRead->PrintFromData();
system("pause");
return 0;
}
//Data.h
#pragma once
#include<iostream>
#include<string>
class CData
{
public:
//singleton 방법으로 할 경우 uncomment
//static CData* pData;
//static CData* GetSharedData();
//전역변수 방법으로 할 경우 uncomment
//static CData sData;
std::string msg;
};
//Data.cpp
#include "Data.h"
CData* CData::pData = nullptr;
CData* CData::GetSharedData()
{
if (pData == nullptr)
pData = new CData();
return pData;
}
//Write.h
#pragma once
class CWrite
{
public:
void WriteToData(char* msg);
};
//Write.cpp
#include "Write.h"
#include "Data.h"
void CWrite::WriteToData(char* msg)
{
//singleton 방법으로 할 경우 uncomment
//CData* pData = CData::GetSharedData();
//pData->msg.append(msg);
//전역변수 방법으로 할 경우 uncomment
//CData::sData.msg.append(msg);
}
//Read.h
#pragma once
class CRead
{
public:
void PrintFromData();
};
//Read.cpp
#include "Read.h"
#include "Data.h"
#include<iostream>
//전역변수 방법으로 할 경우 uncomment
//CData CData::sData;
void CRead::PrintFromData()
{
//singleton 방법으로 할 경우 uncomment
//CData* pData = CData::GetSharedData();
//std::cout >> pData->msg.c_str() << std::endl;
//전역변수 방법으로 할 경우 uncomment
//std::cout >> CData::sData.msg.c_str() << std::endl;
}