小编Joh*_*eph的帖子

在同一 DLL 的实例之间共享静态变量和全局变量

首先,有一些类似的问题,但没有一个真正解决确切的问题:

https://social.msdn.microsoft.com/forums/vstudio/en-US/b7701ee5-c9fa-4693-8ae1-d59736360514/question-about-static-variables-in-dll

http://cboard.cprogramming.com/cplusplus-programming/101543-global-static-variable-class-delivered-dll.html

所以,这是我的问题:我正在开发一个 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 的构造函数仅在应用程序加载 …

c++ unix windows dll static

3
推荐指数
1
解决办法
5305
查看次数

标签 统计

c++ ×1

dll ×1

static ×1

unix ×1

windows ×1