首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DriverKit驱动中可以使用`new`和`delete`吗?

DriverKit驱动中可以使用`new`和`delete`吗?
EN

Stack Overflow用户
提问于 2020-06-16 20:46:22
回答 1查看 128关注 0票数 1

DriverKit提供IONewZeroIOSafeDeleteNULL。它们不调用任何构造函数或析构函数。

假设我希望在ivars结构中有一些类。该类不需要从OSObject继承,也不需要从IOService继承。我应该如何构造这个对象?如果我将它作为ivars结构中的成员,则不会调用我的类的构造函数。如果我在ivars结构中保存一个指向我的类的指针,我需要分配和调用这个类的构造函数。我可以使用new / delete来做这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-17 16:33:20

默认operator new实际上是在DriverKit运行时中实现的。我已经成功地使用它来分配和初始化我的…_IVars对象本身。(对于.iig文件中定义的任何类,由iig生成的标头自动转发声明的PIMPL类型)

所以,我实际上是在MyDriver::init()中这样做的

代码语言:javascript
复制
    this->ivars = new MyDriver_IVars();

然后在MyDriver::free()

代码语言:javascript
复制
    if (this->ivars != nullptr)
    {
        // … some extra cleanup …

        delete this->ivars;
        this->ivars = nullptr;
    }

在我看来,考虑到iig系统强加给我们的约束,这是可以实现的最干净的方法。

我强烈怀疑operator new是用与常规macOS用户空间相同的后端实现的,尽管我还没有真正去检查它,因为到目前为止我还没有遇到任何问题。显然,相应的delete也可以工作。

OSTypeAlloc适用于OSObject-derived类型,绝对应该用于这些类型,但不适用于其他类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62408857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档