我有一个抽象的基类,用于派生一些类。 这些类的一些属性在所有类之间共享,这些属性应该是不可修改的。
为了使所有10个类共享一个变量,我将它变为静态。
class ABC{
public:
static int *anArray;
int index;
static int tot_index;
virtual void print()=0;
ABC(){index=tot_index++;};
virtual ~ABC(){};
};
这很好用,tot_index将包含实例化的类的数量,索引是每个类的唯一标识符。
我遇到的问题是* anArray和派生类的数量是在运行时设置的,在实例化类之后我不想修改这些值。
我很害怕:
1)我应该在哪里设置* anArray值?只是派生类的一些随机的?
2)如果变量应该是不可修改的,那么我应该将它设置为const。但是如果我不知道编译时的值是什么,我该如何将它设置为const?
答案 0 :(得分:1)
不是使用静态变量,而是有一些模式可以实现这一点。
最简单的实现,尽管不是出于多种原因的最好,但是将共享变量放在单例基类中(参考:GoF Singleton模式)。
另一个更漂亮的解决方案可能是一些工厂模式,比如GoF抽象工厂。
编辑: 另外,对于doc的评论,请参阅:http://www.parashift.com/c++-faq/static-init-order-on-first-use.html
:)