写出单例类的C++代码,使其满足以下两个要求: (1)一个应用程序中,该类只能创建一个对象,且提供一个全局访问点; (2)自定义该类的拷贝构造函数、拷贝赋值运算及析构函数。 (简化起见,该类的对象可以
时间: 2024-11-15 11:24:17 浏览: 6
《Head First设计模式》学习代码,使用C++实现-Book-HFDP-Code.zip
当然,这里是一个简单的C++单例模式实现,它采用了懒汉式加载策略,以满足您的两个要求:
```cpp
#include <iostream>
class Singleton {
private:
// 私有化静态成员,防止实例化
static Singleton* instance;
// 防止通过拷贝构造函数和赋值操作符直接创建新对象
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
// 使用静态成员函数保证只有一个实例存在,并返回引用
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
~Singleton() {
// 自定义析构函数,如果需要释放资源,在这里进行
delete this; // 注意,这里只会删除当前线程持有的实例
}
// 公共访问接口,仅提供获取单例的功能
void doSomething() const {
std::cout << "Doing something with the singleton." << std::endl;
}
};
// 初始化静态成员
Singleton* Singleton::instance = nullptr;
int main() {
// 使用全局访问点获取并使用单例
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance(); // 第二次调用将返回第一次创建的实例
s1->doSomething();
s2->doSomething();
return 0;
}
```
阅读全文