1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <utility>

class Singleton {
public:
static Singleton* getInstance() {
static Singleton instance;
return &instance;
}

Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
Singleton& operator=(Singleton&&) = delete;
private:
Singleton() {
std::cout << "Singleton instance created." << std::endl;
}
~Singleton() {
std::cout << "Singleton instance destroyed." << std::endl;
}
};

int main() {
Singleton* singleton1 = Singleton::getInstance();
Singleton* singleton2 = Singleton::getInstance();

// Singleton sa = *singleton1;
// Singleton sb(*singleton1);
// Singleton sc = std::move(*singleton1);
// Singleton sd(std::move(*singleton1));
if (singleton1 == singleton2) {
std::cout << "Both instances are the same." << std::endl;
} else {
std::cout << "Instances are different." << std::endl;
}

return 0;
}