2.利用静态成员和静态函数设计实现一个单件类Singleton。所谓单件类,就是指在内存中最多仅有一个对象实例。提示: a)不可以用构造函数创建对象,才能确保对象创建是可控的;(通过构造函数私有化来实现的) b)当前是否有存在对象必须是随时可以知道的,并且如果存在,随时可以取得该对象的指针或者引用(通过静态成员变量来保存) c)因为构造函数私有化,导致变量无法从外部创建,因而必须为用户提供一个获取对象的接口,当前对象如果存在,该接口直接返回对象引用,否则创建对象并返回对象引用。(通过静态成员函数来实现) 思考:同学们可以思考,如果想要实现对象池,把对象的数量控制在N以内,应该怎么修改?
时间: 2024-04-13 20:28:31 浏览: 133
下面是一个使用静态成员和静态函数实现的单例类Singleton的示例代码:
```cpp
class Singleton {
private:
static Singleton* instance; // 静态成员变量
Singleton() {} // 构造函数私有化
public:
static Singleton* getInstance() { // 静态成员函数获取对象实例
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance(); // 获取对象实例
Singleton* s2 = Singleton::getInstance(); // 再次获取对象实例
if (s1 == s2) {
cout << "s1 and s2 are the same instance" << endl;
} else {
cout << "s1 and s2 are different instances" << endl;
}
return 0;
}
```
上述代码中,通过将构造函数私有化,确保对象的创建是可控的。使用静态成员变量`instance`来保存当前对象的指针。通过静态成员函数`getInstance()`来获取对象实例,如果当前对象不存在,则创建一个新的对象并返回,否则直接返回已有的对象。这样就可以确保在内存中最多只有一个对象实例。
如果想要实现对象池,将对象数量控制在N以内,可以在`getInstance()`函数中加入逻辑判断,限制对象数量不超过N。当达到数量限制时,可以选择返回已有对象或者创建新的对象替换旧的对象,具体实现方式可以根据需求进行调整。
阅读全文