/////////////////////////////////////////////////////////////////////// // SkeletonPlus.cpp - Gang of Four Singleton with reference counting // // Ver 1.1 // // Jim Fawcett, CSE776 - Design Patterns, Fall 2017 // /////////////////////////////////////////////////////////////////////// #include "SkeletonPlus.h" #include "../Utilities/Utilities.h" #include Singleton* Singleton::Instance() { ++refCount; if (pUniqueInstance == nullptr) pUniqueInstance = new Singleton(); return pUniqueInstance; } Singleton::Singleton() { std::cout << "\n creating singleton instance"; } void Singleton::ReleaseInstance() { if (--refCount == 0) { delete pUniqueInstance; pUniqueInstance = nullptr; } } Singleton::~Singleton() { std::cout << "\n destroying singleton instance\n"; } void Singleton::SingletonOperation(const std::string& data) { singletonData = data; } std::string Singleton::GetSingletonData() { return singletonData; } int main() { Utilities::title<'='>("Testing SkeletonPlus Singleton"); Singleton* pInstance1 = Singleton::Instance(); pInstance1->SingletonOperation("hello world"); std::cout << "\n instance has this data: " << pInstance1->GetSingletonData(); Singleton* pInstance2 = Singleton::Instance(); pInstance2->SingletonOperation("hello CSE776 world"); std::cout << "\n instance has this data: " << pInstance2->GetSingletonData(); std::cout << "\n address of instance1: " << reinterpret_cast(pInstance1); std::cout << "\n address of instance2: " << reinterpret_cast(pInstance2); pInstance1->ReleaseInstance(); pInstance2->ReleaseInstance(); std::cout << "\n\n"; return 0; }