0

我有一个单例类,用于加载实例化为静态本地的 Qt 插件:

LibraryManager* LibraryManager::instance()
{
    static LibraryManager manager;
    return &manager;
}

QPluginLoader::staticInstances()每当在 LibraryManager 的构造函数中被命中时,我都会在控制台中收到“__cxa_guard_acquire():函数局部静态变量的初始化程序,称为封闭函数” 。这到底是什么意思,我该如何解决这个问题?

4

2 回答 2

0

根据此来源,您以某种方式设法递归回同一线程中的同一本地函数。您的库管理器本身不是一个插件吗?:)

我不知道这意味着什么,但我的直觉是一个老派单身人士可以解决它。那就是将一个指向实例的指针作为类成员初始化为 null 并在 instance() 调用中进行延迟检查。我知道它需要实现一个静态释放方法并找到一个合适的位置来调用它。但它会绕过本地功能,这是您的错误消息所抱怨的。

于 2012-07-19T15:25:55.087 回答
0

这只是一个大脑错误。

我的插件类继承自库客户端实际使用的类(它调用管理器,实例化插件,其构造函数调用管理器......你可以看到它导致的位置),当它应该继承自一个只调用的不同类时成员函数(而不是其构造函数)的管理器。

tl;博士我输入了错误的类名,但我认为我没有这样做,所以我将那部分代码视为可能包含问题。

于 2012-07-19T16:50:24.363 回答