首先,有一些类似的问题,但没有一个真正解决确切的问题:
所以,这是我的问题:我正在开发一个 VST 插件,并且我有一个在 DLL 中定义和实现的类。加载同一个 DLL 的多个实例,我想做的是维护一个“实例计数”来监视类的构造次数(仅在根据 VST 标准加载 DLL 时发生一次)。
一种简单的方法是创建一个类静态变量,将其初始化为 0 并在构造函数中递增/在析构函数中递减。我确信我知道我的类何时被构造和析构,但我不确定该类静态变量是否会在我的 DLL 实例之间共享。
澄清一下,我多次加载同一个 DLL;DLL 中是一个类(仅在 DLL 代码中使用,不暴露给应用程序。)有一些关于 DLL 中定义的数据的行为在 Windows 和 Unix 之间是否有所不同的讨论,所以我想知道如果在 DLL 中执行此类操作对于跨平台使用是安全的。
示例类,在 DLL 中定义,不以任何方式暴露给加载 DLL(或其他方式)的应用程序。
头文件
// Foo.h
# pragma once
class Foo {
static int s_InstanceCount;
public:
Foo();
~Foo();
};
Run Code Online (Sandbox Code Playgroud)
现在是源文件
// Foo.cpp
#include "Foo.h"
int Foo::s_InstanceCount = 0;
Foo::Foo() {
s_InstanceCount++;
}
Foo::~Foo() {
s_InstanceCount--;
if (s_InstanceCount == 0) {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
Foo 的构造函数仅在应用程序加载 …