![](/img/trans.png)
[英]Why is an object's constructor being called in every exported WASM function?
[英]Static object's constructor not being called
我有一個定義兩個對象的頭文件:
// header.h
static A object1("param1", "param2");
static A object2("param1", "param2");
這是A的樣子:
class A {
public:
int random;
A(char* p1, char* p2){
printf("Called constructor for %s | %s\n", p1, p2);
}
};
但是,構造函數永遠不會被調用。 我正在這樣做:
#include "header.h"
int main(){
// to prevent optimization issues
object1.random = rand();
if (object1.random != 3) { printf("\n"); }
return 0;
}
而且我從沒有在控制台上看到消息,只是保持空白。
我已經讀過static initialization order fiasco
,但是我相信這不是問題,因為這些對象都不依賴另一個,所以順序並不重要...
我在Windows 7 x64上使用MSVC ++ 2013
靜態C ++類成員何時初始化? 包含有關此主題的好答案。
簡而言之,有3種保證(引用上述問題的原始Tadeusz Kopec答案):
如果在您的特定情況下,靜態變量object1
和object2
沒有初始化,則可能與編譯器優化有關,而忽略了未使用變量的初始化。 您可以通過在main內部添加這些變量的用法來輕松驗證這一點,並觀察它們是否已初始化以及何時初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.