我有这个现有的代码,其中他们有一个类和该类中的初始化方法。预期一旦创建了类的对象,他们就需要在其上调用initialize。
初始化方法存在 的原因该对象要尽早创建以具有全局作用域,然后在加载依赖的dll之后再调用初始化方法。
具有初始化 的问题该类现在具有此bool isInitialized,需要在每个方法中进行检查,然后再继续进行,如果未初始化则返回错误。简而言之,这是一个很大的痛苦。
一种可能的解决方案 在构造函数中初始化。仅在全局范围内有一个指向该对象的指针。加载dll后创建实际对象。
上述解决方案的问题 任何创建此类的对象的人都必须知道,仅在dll被加载后才需要创建该对象,否则它将失败。
这可以接受吗?
call_once
在C ++ 11。尚未使用C ++ 11的项目应该研究如何在C ++ 11中实现call_once(着重于解决什么问题,然后解决),然后以(陈旧的)C ++风格重新实现它。它需要一个多线程安全同步原语,该原语的状态需要静态初始化(使用恒定值)。请注意,C ++ 11之前的编译器可能还有其他需要满足的特性。