如何在C ++

(抱歉,无法发布代码)

实现dll时,具有无状态的优点。一个例子是视频分析,其中结果取决于最近的帧。 dll的操作具有状态(=最近的帧)。但是,此状态基于内存,因此调用方可以拥有它,并且dll保持无状态。

但是,您不能总是使dll变为无状态。考虑一个依赖于状态为另一个第三方dll的dll 。该状态可以基于GPU,线程和通信资源。您不想将调用者暴露给其他第三方dll,因此您需要(从dll中)保持状态。

如何在dll中使用c ++最优雅,最有效地实现这一目标?

我当前的实现有一个名为DllContext的类。 DllContext仅实例化一次,永远只有一个对象。有一个类型为DllContext*的静态指针,它将在该对象的生存期内保存该对象。静态在这里表示作用域:它在任何函数体之外定义,而不是任何类的一部分。它只能从定义3个dll入口点的最小文件中访​​问:

dll init(): 使用new

创建对象

dll deInit(): 使用delete

删除对象

dll doWork(): 调用doWork()对象的相应DllContext

我不喜欢这种解决方案。我会说这不是单例解决方案,因为该对象只能从一个最小文件中访​​问。但是,这仍然很难看,有什么建议吗?

shfenqi 回答:如何在C ++

您没有太多选择。第一次无状态呼叫时呼叫init。使用小型包装静态对象(而不是裸DllContext指针)可以在其析构函数中调用deInit。甚至不用理会deInitWhy cleaning the house to be demolished?除非实际上有并非不是“防止内存泄漏”的原因。

本文链接:https://www.f2er.com/3129862.html

大家都在问