Add example for classic singleton
This commit is contained in:
parent
248e48d5c9
commit
9bb2f9867d
|
@ -16,5 +16,6 @@ project(
|
|||
)
|
||||
|
||||
add_library(singleton "singleton.cpp")
|
||||
add_library(singleton-pointer "singleton-pointer.cpp")
|
||||
add_executable(singleton-test "main.cpp")
|
||||
target_link_libraries(singleton-test singleton)
|
||||
target_link_libraries(singleton-test singleton singleton-pointer)
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
|
||||
#include "singleton.h"
|
||||
#include "singleton.hpp"
|
||||
#include "singleton-pointer.hpp"
|
||||
|
||||
int main(const int argc, const char *argv[])
|
||||
{
|
||||
|
||||
/****************************************************************************/
|
||||
// Meyers Singleton - static getInstance
|
||||
|
||||
// Creates a singleton, initializes message in ctor
|
||||
Singleton &s = Singleton::getInstance();
|
||||
s.showMessage();
|
||||
|
@ -12,4 +17,20 @@ int main(const int argc, const char *argv[])
|
|||
// Update already existing Singleton message, show it
|
||||
Singleton::getInstance().updateMessage("Second update\n");
|
||||
s.showMessage();
|
||||
|
||||
/****************************************************************************/
|
||||
// Classic Singleton - pointer getInstance
|
||||
|
||||
|
||||
std::cout << "\n##### ClassicSingleton #####\n\n";
|
||||
|
||||
// Creates a classic singleton, initializes message in ctor
|
||||
ClassicSingleton *classicSingleton = ClassicSingleton::getInstance();
|
||||
classicSingleton->showMessage();
|
||||
// Update already existing ClassicSingleton message, show it
|
||||
classicSingleton->updateMessage("First update\n");
|
||||
ClassicSingleton::getInstance()->showMessage();
|
||||
// Update already existing ClassicSingleton message, show it
|
||||
ClassicSingleton::getInstance()->updateMessage("Second update\n");
|
||||
classicSingleton->showMessage();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
#include "singleton-pointer.hpp"
|
||||
|
||||
// Initialize pointer to instance to null; Allocate on first call to getInstance
|
||||
ClassicSingleton* ClassicSingleton::instance = nullptr;
|
||||
|
||||
ClassicSingleton* ClassicSingleton::getInstance(){
|
||||
// If the instance is null, return a new one; Otherwise return instance
|
||||
if(instance == nullptr) instance = new ClassicSingleton;
|
||||
return instance;
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
#ifndef SINGLETON_POINTER_HPP
|
||||
#define SINGLETON_POINTER_HPP
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class ClassicSingleton{
|
||||
public:
|
||||
// returns pointer to single getInstance
|
||||
static ClassicSingleton* getInstance();
|
||||
|
||||
// example functions manipulating singleton object
|
||||
inline void showMessage() const { std::cout << message;}
|
||||
void updateMessage(const std::string &m) { message=m;}
|
||||
|
||||
private:
|
||||
// Do not allow construction of this object; Use getInstance() instead
|
||||
ClassicSingleton(){ message = "New ClassicSingleton\n";}
|
||||
// Do not allow copying of this object
|
||||
ClassicSingleton(const ClassicSingleton&){}
|
||||
ClassicSingleton& operator=(const ClassicSingleton&){}
|
||||
|
||||
// Static pointer to instance of this singleton
|
||||
static ClassicSingleton* instance;
|
||||
std::string message;
|
||||
};
|
||||
|
||||
#endif // SINGLETON_POINTER_HPP
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
#include "singleton.h"
|
||||
#include "singleton.hpp"
|
||||
|
||||
Singleton::~Singleton()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue