(抱歉,无法发布代码)
实现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
我不喜欢这种解决方案。我会说这是非单例解决方案
,因为该对象只能从一个最小文件中访问。但是仍然很丑,有什么建议吗?(对不起,无法发布代码)在实现dll时,无状态的优点。一个例子是视频分析,其中结果取决于最近的帧。 dll的操作...
您没有太多选择。第一次无状态呼叫时呼叫init
。使用小型包装静态类(而不是裸DllContext
指针)可以在其析构函数中调用deInit
。甚至不用理会deInit
。 Why cleaning the house to be demolished?除非实际上有并非不是“防止内存泄漏”的原因。