【发布时间】:2021-07-25 11:10:56
【问题描述】:
#include <iostream>
using namespace std;
class Singleton {
public:
int val;
static int count;
Singleton() {
if (count == 1) throw 0;
Singleton::count++;
val = 100;
}
};
int Singleton::count = 0;
int main () {
try {
Singleton a, b;
} catch (...) {
cout << "error\n";
}
return 0;
}
所以我们统计创建的对象个数,当count快要超过1时从构造函数中抛出。从构造函数中抛出会中止对象的创建吗?
【问题讨论】:
-
我已经有 24 年没有接触过 C++ 了,但您肯定需要在
if (count == 1) throw 0;和Singleton::count++;周围进行一些同步吗?否则,线程 A 可以清除if (count == 1),在它清除Singleton::count++;之前,线程 B 也可以清除if (count == 1)- 你有两个实例(至少)。 -
你对这门课有什么要求?
-
把同步问题放在一边,你删除编译时机制以确保奇异性和正确的生命周期,并用运行时错误替换它们没有机制来解决生命周期问题......这个并不比流行的方法好。
-
您是想找到一种在 C++ 中实现单例的正确方法,还是只是对这个特定(非常具体的)代码感到好奇?
-
@AlanBirtles 没有这样的要求,我只是对这种方法感到好奇。
标签: c++ oop design-patterns singleton