问题标签 [static-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++中的静态初始化顺序问题
这是旧主题的另一个变体:不同翻译单元中静态对象的初始化顺序没有定义。
下面是我的特定场景的精简示例。G 和 F 类是非 POD 类型。F 依赖于 G 是指要构造 F 的实例,您需要一定数量的 G 实例。(例如,F 可能是应用程序发出的某些消息,而 G 的实例将是此类消息的组件。)
G.hpp
GS.hpp
GS.cpp
F.hpp
文件系统
fs.cpp
F 的构造函数接受一个参数,该参数是应用于 G 的实例的结果
operator+
。由于 F 和 G 的实例都是全局变量,因此不能保证 G 的实例在 F 的构造函数需要它们时已经被初始化。
这里的特殊性是到处都有很多 G 和 F,我想尽可能地保持语法接近上面发布的代码,同时仍然在 F 需要时强制构造 G。
c++ - 无法覆盖派生类中的静态初始化
我正在尝试为层次结构中的类提供不同的静态初始化,但是当我尝试使用此代码时:
我最终遇到了这个构建错误:
似乎无法在派生类上覆盖静态初始化?如果这不起作用,我可能总是将 componentName 定义为返回 const char* 的静态函数,唯一的问题是我希望为部分专业化进行初始化,而且似乎没有任何方法可以我知道在部分专业化中只重新定义一个函数,而不复制所有其他几乎保持不变的代码
spring - 一个bean的Spring静态初始化
嘿,应该如何处理 Spring 中的静态初始化?我的意思是,我的 bean 有一个静态初始化
而且我需要注意之前加载了 ErrorExceptionMapping 。我试过这个:
但我得到了
如果我省略了静态初始化或从 bean 的方法中调用该方法,那当然没问题。我想初始化回调(affterPropertiesSet())在这里没有帮助。
java - java静态内部类初始化错误
上下文: java.io.File 类有一个静态内部类方法如下:
[编辑添加更多代码]我下面的代码最终调用了上面的代码行。从temporaryDirectory() 方法中抛出一个异常,在我的上下文中这是好的/预期的。
然后,当我再次调用相同的方法 (createTempFile) 时,我收到“java.lang.NoClassDefFound 错误 - 无法初始化类 java.io.File$LazyInitialization”
问题:我假设内部类 LazyInitialization 在调用其静态方法时应该由类加载器加载,即使内部方法抛出异常。然而,为什么我在第二次调用时会看到 NoClassDefFound 错误?原来的假设不正确吗?
c++ - 包含数组的结构的 C++ 初始化
我有一个或多或少遵循这种模式的结构:
我希望能够使用以下语法来初始化它们:
确实,初始化语法(或者更确切地说,它的紧凑性)比特定的结构布局更重要。我无法访问标准容器(嵌入式平台),但如果需要,我可以复制它们的一些行为。
在最终形式中,我想一次初始化大约 300 个这些结构容器的数组,只是为了添加更多级别的括号。
c - 如何在多线程上下文中初始化静态变量?
我想在函数中很好地使用 static 关键字是这样的:
简而言之,这似乎是制作关键部分的好方法。我的问题是,如何以线程安全的方式初始化 threadLock?我担心这个例子的问题是锁会被多次分配,每个线程都会使用不同的锁。有想法该怎么解决这个吗?好像是先有鸡还是先有蛋的问题。我想要一个适用于 pthread 和 windows 线程的解决方案(或多个解决方案)。
编辑:我想要这个功能的原因是因为它提供了一种非侵入式的方式来测试在单线程或多线程运行一段代码时是否存在差异(用于调试目的)。
c++ - 如何强制 gcc 从库中链接未引用的静态 C++ 对象
我正在使用可以构建为共享库或静态库的 C++ 库。该库使用工厂技术,其中静态对象在程序启动并创建静态对象时注册自己。
只要使用共享库,它就可以正常工作。当使用静态版本时,没有任何静态对象包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。
有没有办法在链接时强制 gcc 包含库中的所有静态对象?
该库是开源的,如果有帮助,我可以对其进行修改。
c - 静态 pthreads 互斥初始化
使用 pthreads,如何在 C 中初始化一个静态互斥体数组?
对于单个静态互斥锁,我似乎可以使用 PTHREAD_MUTEX_INITIALIZER。但是它们的静态数组呢?例如,
还是必须动态分配?
c++ - 在 C++ 中模仿静态构造函数
这是一个与 C++ 中对象的初始化有关的问题。
我有一组类(不是实例),继承自一个公共基类,我需要它们在程序启动时在容器(特别是地图)中注册有关自己的信息。
问题是我需要它是动态的。容器是在一个独立的项目中定义的,不同于类。我宁愿避免制作该库的多个硬编码版本,每个使用它的程序中的每组类都有一个版本。
我考虑在每个子类中都有一个特殊类的静态实例,这将在其构造函数中进行注册。但是,我发现没有办法保证容器会在这些对象的构造之前被构造。
我还应该注意,容器中有关子类的信息应该在创建这些子类的任何实例之前可用。
有没有办法做到这一点,或者一般模仿 C++ 中的静态构造函数?
c++ - std::set 用作静态模板化成员变量
我正在尝试制作类似于 Java 风格的 Enum 的东西,我称之为标志。要求是每个标志都是静态的,因此标志可以直接引用,每个标志存储它的名称字符串和整个集合可迭代并有助于查找。
我正在使用模板,以便单独存储每组标志(从而使我不必在每个子类中显式放置一组)。
我确信这是一个启动问题,因为运行程序的成功或失败取决于包含标志声明的目标文件的文件名(Ao segfaults 但 Zo 运行良好。)
问题似乎是静态初始化顺序之一,这段代码编译得很好,但是当它运行时,gdb 产生以下内容:
我的代码如下:
项目.hpp
项目.cpp
我的第一篇文章,所以如果我的格式错误或不具体,请告诉我。PS。奇怪的是,将 set 替换为 vector 会导致程序正常工作,就好像 set 在插入指针时遇到了麻烦。为了测试这一点,我用一组 int 替换了 set 并尝试在类初始化时插入 0,这也导致了同样的错误。