【问题标题】:static local variable destruction in plugin插件中的静态局部变量销毁
【发布时间】:2015-01-19 17:45:20
【问题描述】:

我看到了几个关于静态局部变量和类的静态成员的问题。从这里的一条评论中,可能是最清楚的一条link

C++ Primer 说:

每个局部静态变量在 第一次执行通过对象的定义。当地的 函数结束时不会破坏静态;他们被摧毁了 当程序终止时。

但我发现上面“程序终止时”的描述是模棱两可的。这是否意味着应用程序退出?或者如果是插件,是否意味着插件被卸载?

我注意到以前在 Linux 上以发布模式编译时,我的插件中的局部静态变量没有被破坏,它被卸载。但是当我将其更改为类成员时,在卸载插件时它会被正确销毁。类/局部静态变量仅在插件中使用。

谁能解释一下?

【问题讨论】:

  • 我不认为它回答了我要问的问题。在这里,我要求插件中的代码。插件程序的开始和结束,我的理解是在您将插件加载到应用程序时开始,程序的结束是当您从程序中卸载插件时(而不是应用程序本身的结束)。如果是这种情况,我认为在卸载插件时应该销毁局部静态变量,但不知何故我确实注意到了不同的行为。我不确定这是否是编译器/系统中的错误,或者是我在上面引用的句子甚至在标准中的歧义。

标签: c++ plugins static destruction


【解决方案1】:

静态存储区由实现管理,而不是由插件管理。

请记住,如果它是一个普通函数而不是插件,则该函数可能会被多次调用,并且您希望在静态对象中找到与上次调用相同的数据。

正确的行为是,如果您可以卸载并重新加载插件,则本地静态变量将保留其值,因此在实现退出之前它们不会被销毁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2019-05-30
    • 2013-12-19
    • 2023-03-23
    相关资源
    最近更新 更多