c++ - 保护类不在 main() 之前实例化

标签 c++ singleton

我想确保我的 C++ 类在进入 main() 之前绝不会被实例化。有什么办法可以实现吗?

--

一些说明:

我正在编写一个嵌入式应用程序。我的类必须是静态的(驻留在 BSS 中),但在实例化时它需要一些资源,这些资源在 main() 开始时初始化某些东西之前是不可用的。所以我想让它成为迈耶斯单例。理想情况下,我想做出某种断言,确保 MyClass::instance() 永远不会在 main() 之前被调用。

最佳答案

在某些方法被调用之前限制类的构造将是一场失败的战斗。特别是如果该方法是 main()。请问你为什么有这个要求?也许还有另一种方法可以解决您试图解决的实际问题。

编辑:感谢您提供 CTQ,从中判断您最好的选择可能是最简单的解决方案,它是一个静态 bool 值。由于它是嵌入式的,我将假设您几乎可以控制整个环境。在您的 ::instance() 中基于静态 bool 的简单断言可能就是您所需要的。

更进一步,听起来您需要依赖注入(inject)或其他方式来确保您的资源以正确的顺序初始化,老实说,这不是我在 C++ 中解决的问题(更不用说在嵌入式系统上了)。我无法就该案例的最有效方法提供任何额外的见解,建议您考虑该问题的其他答案之一。

关于c++ - 保护类不在 main() 之前实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847478/

相关文章:

c++ - VIsual Studio 说我在字符串中有错误

c++ - Visual Studio 2015 没有 cl.exe

java - 在 spring 中创建不 Autowiring 的 servlet 上下文

c# - 为什么单例不能直接实现 IObjectReference?

ruby - 确保类的单个实例的正确方法是什么?

c++ - 在同一台机器上编译的相同 C++ 代码表现不同

c++ - 将临时对象作为参数传递 (C++)

c++ - 单例:是否存在内存泄漏?

iis - 由 IIS 7 和全局变量(单例)托管的 WCF 服务

c++ - Boost::Python- 可以从 dict 自动转换 --> std::map?