情况:
我有:
class Platform {
public:
Platform() { count++; cout << getCount();}
static int getCount() { return count; }
private:
static int count;
}
它被创建为静态库。
考虑做一个动态库扩展
class __declspec(dllimport/dllexport) DerivedPlatform : public Platform {
}
是的,我知道我是从非 dll 接口类派生的。
Per:静态字段是继承的吗?,应该只有一个 count 实例。
这是棘手的部分,实际上我最终得到了两个不同的 count 副本(即使 count 被声明为静态)。即,在加载 dll 并调用 registerPlatforms() 时,它会增加一个不同的计数对象:
int main() {
Platform::count = 0;
Platform A; // increases count by 1, cout shows 1
loadPlugin(); // loads the shared library DerivedPlatform
DerivedPlatform D; // increases count by 1 again, cout shows 2
cout << Platform::getCount(); // shows 1 !!!!!!
}
我不知道如何解决这个问题,即。如何确保只有一个静态变量存在。显然 DLL 有它们自己的静态变量堆——所以为什么会发生这种情况是有道理的。