【发布时间】:2018-05-24 11:21:18
【问题描述】:
我有一个类,它维护来自类型 class IOSharedDataQueue : public IODataQueue 的实例,它是 IOKit 对象。
该类与主类的各种方法解耦并调用,该类是基于IOKit的类(派生自IOService)。
在尝试将此类转换为单例时,我添加了具有以下实现的 getInstance 函数:
myclass& myclass::getInstance()
{
static myclass instance;
return instance;
}
但是,似乎 c++11 初始化单例的方式应该在 IOKit 编译器中工作,并且 Xcode 产生以下错误:
This initialization requires a guard variable, which the kernel does not support
问题是,它适用于不包含基于 IOKIt 的对象的类。
也许有人遇到过这个问题,我还没有看到任何关于这个限制的文档。
编辑:
我发现如果我的类不以任何方式包含任何 IOResources 对象,它可以设计为带有保护变量的单例。
但是,我仍然希望能够创建一些简单且包含的包装器,以便在整个 IOKit 项目中使用,而无需传递指针。
【问题讨论】:
标签: c++ macos kernel iokit xnu