问题标签 [static-initializer]

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.

0 投票
6 回答
10215 浏览

c++ - .crt 部分?这个警告是什么意思?

我最近收到了这个警告(VC++ 2010)

warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators

我假设这是关键部分。自从我的操作系统课程以来已经有一段时间了,所以我无法真正弄清楚这意味着什么。如果我没记错的话,关键部分使用共享资源。那么这个警告是如何相关的,它到底是什么意思呢?

0 投票
7 回答
878 浏览

c++ - 在静态成员的初始化中避免 new()?

有问题的代码如下:

标题:

执行:

p>

有没有办法不使用这些 new() 运算符,但不添加任何新的辅助变量?

类型必须完全一样,才能与程序的其余部分兼容。

编辑:从答案中猜测,如果没有使用辅助变量,则必须使用 new() 。这是真的吗?因此,我可能会添加辅助变量。无论如何,这是一个编译器生成的代码,所以没问题,只要标题是可读的。

以下可以吗?现在 Valgrind 说没有泄漏。

0 投票
2 回答
1120 浏览

android - Android中的全局初始化

我正在编写一些作为 jar 文件分发的库代码,开发人员在使用之前需要使用应用程序 ID 对其进行初始化。初始化只是一个函数调用,比如

棘手的是我不确定如何指导开发人员进行这个初始化调用。起初,我认为主要活动中的单个静态初始化程序块将是最简单的方法。问题是用户可以通过其他一些活动或意图进入应用程序,并且不会加载主要活动。有没有一种通用的方法来确保在应用程序启动时运行一行代码,而不管应用程序是如何启动的?

初始化调用是幂等的,所以我可以告诉人们在每个可以使用它的地方进行初始化调用,但这会很麻烦。

0 投票
4 回答
3866 浏览

java - Program hangs if thread is created in static initializer block

I have come across a situation where my program hangs, looks like deadlock. But I tried figuring it out with jconsole and visualvm, but they didn't detect any deadlock. Sample code:

When I execute this in debug mode then I could see control reaching @Override public void run() { state = 11;

but as soon as state=11 is executed it just hangs/deadlocks. I looked in different postings in stackoverflow and I thought that static initializers are thread-safe but in that case jconsole should report this. About main thread, jconsole saying that it is in waiting state, and that's fine. But for the thread created in static initializer block, jconsole says that it is in RUNNABLE state and not blocked. I am confused and here lacking some concept. Please help me out.

0 投票
3 回答
342 浏览

c# - C# 中的集合初始化器

在 Java 中,我可以创建一个 List 并使用静态初始化程序立即填充它。像这样的东西:

这很方便,因为我可以动态创建列表,并将其作为参数传递给函数。像这样的东西:

我是 C# 的新手,并试图弄清楚如何做到这一点,但我空空如也。这在 C# 中可能吗?如果是这样,怎么办?

0 投票
2 回答
358 浏览

c++ - 在 C++ 中初始化类的静态数组成员的更好方法(虽然 const 是首选)

作为类的成员,我有一个指向函数的静态指针数组。

我需要初始化它,但事实证明这个数组有 64K 长,所以用静态初始化器初始化它是不切实际的,{ x, y, z, ... }因为它会使代码混乱。

我不得不用代码初始化它,有几个循环。

我想这样做的方法是static在构造函数中初始化数组并为其设置一个标志,所以只有类的第一个实例的构造会触发这个初始化。

从实例内部访问这个静态标志也不是线程安全的,但这是另一回事。

有没有更清洁或更好的方法来做到这一点?

我也希望这个数组是const,但恐怕唯一的方法是static {}初始化,对吧?

0 投票
1 回答
73 浏览

c++ - 在库中查找所有动态初始化

我有几个大型代码库可以编译成动态库。我知道其中一些有一些非常昂贵的动态全局动态初始化器。(也就是说,构建起来非常昂贵的类/结构的全局实例。)

我想要一种方法来查看这些动态初始化程序在代码中的内容/位置的列表,以便我可以查看它们是否昂贵并且需要重构。我想避免挖掘大量程序集,因为其中一些库非常大并且可能包含数百个动态初始化程序(其中许多很小且相当便宜,如字符串构造)。

有没有可以帮助我解决这个问题的工具?(我的工具链是 Redhat Linux/gcc/cmake。)

0 投票
2 回答
5636 浏览

java - 如何在 Sun 的 JVM 中禁用延迟类加载/初始化?

默认情况下,Sun 的 JVM 既延迟加载类,又延迟初始化(即调用它们的<clinit>方法)它们。考虑下面的类, ,它在一个块期间ClinitBomb抛出一个。Exceptionstatic{}

现在,考虑如何触发炸弹:

我们保证爆炸发生在 B 点之前,因为forName的文档是这样说的;问题是它是否发生在点 A 之前(Main加载时)。在 Sun 的 JVM 中,即使main()包含对 的静态引用ClinitBomb,它也会发生在 A 之后。

我想要一种方法来告诉 JVM 在初始化ClinitBomb后立即加载和初始化(因此炸弹在 A 点之前Main爆炸。)一般来说,我想说“每当加载/初始化类 X 时,也对任何它引用的 Y 类。”

有没有办法做到这一点?

0 投票
4 回答
247 浏览

c++ - 内置类型的对象是否具有特殊的静态初始化顺序优先级?

我希望以下代码会产生分段错误(或其他 UB):

那是因为tstr. 由于零初始化,我希望str保持该值。(char const*)0我的解释[C++11: 3.6.2/2]支持这一点。

但是,上面的代码片段似乎按预期输出了字符串(我还通过打印指针的值来确认行为)。

是否有一些我在这里遗漏的静态初始化规则,允许在开始构建str之前进行值初始化?t它在标准中的什么位置?


在构建时出现在静态变量解析上,其中一个回答者断言使用char const*而不是std::string静态全局避免了静态初始化顺序惨败。我不同意,但现在我不太确定......

0 投票
2 回答
4690 浏览

java - Java:构造Locale对象时NullPointerException导致的ExceptionInInitializerError

我正在为我与其他几个人编写的程序进行本地化。大多数字符串现在从 ini 文件以适当的语言加载。我正在尝试对程序中的货币格式做同样的事情。但是,一旦我尝试启动应用程序,就会遇到运行时异常。

我使用 Locale 对象作为几个 NumberFormat.getCurrencyInstance() 的参数,如下所示:

Lang 是包含所有本地化内容的类。IDE 在尝试运行时抱怨的代码是public static Locale cLocale = new Locale(GUI.DB_info[19],GUI.DB_info[20]);

GUI 是包含 GUI 的类,我们决定在其中构造 DB_info 数组(它本身只包含从另一个类中的远程数据库加载的信息)。DB_info[19] 是语言代码(现在),DB_info[20] 是国家代码(美国)。数组元素正在被正确填充——或者,我现在无法深入了解程序;但是填充 DB_info 的代码没有任何改变。

完整的例外情况如下:

GUI 中引用的行是: static String welcome = Lang.L_WELCOME + ", " + empName;,而 Lang.java 基本上是这样的:

这是为了让大多数字符串以不同的语言显示。Lang 内部还有另一种方法可以加载其他一些字符串,与第一组无关。我不相信它会导致这个问题,但如果需要我可以发布它。

这些类/方法的启动顺序如下: GUI.Main 调用 Login 类,该类调用 CreateLogin 方法。该方法调用 Clients.main,它从 GUI 中获取传递给它的 DB_info 数组。客户端填充 DB_info 数组。然后调用 Lang.other(为登录页面获取特定于语言的字符串),并创建登录按钮和标签。一旦登录成功,员工登录的首选语言(从数据库)被传递给 Lang.main 以加载其他字符串(因此 emp_lang 在上面的代码中被传递)。

直到我添加了 Locale 对象的代码,所有这些都运行良好。现在我得到 ExceptionInInitializerError 异常。有谁知道发生了什么?

顺便说一句,为了从我使用 ini4j 的 ini 文件加载。我在谷歌搜索时发现的一些论坛帖子表明这是一个问题,但我看不出它与 Locale 对象的问题有何关系。ini 的东西工作(工作)很好。