在matlab中,我有一个类在构造过程中绑定共享资源并在删除时释放它。(在我的具体情况下,共享资源是一个我可以通过 http://localhost:1234 与之交互的端口)
它看起来像这样:
classdef myClass < handle
methods
function myClass()
OpenExecutableUsingPort1234();
end
function delete(this)
CloseExecutableUsingPort1234();
end
end
end
当我这样使用它时:
instance = myClass();
clear instance;
一切正常。我打开和关闭它没有问题。但是当我这样使用它时:
instance = myClass();
instance = myClass(); % can't access the port during construction, because it's in use.
我无法启动可执行文件,因为该端口正在使用中。
事件顺序是这样的:
- 构造了 myClass 的第一个副本。端口没有问题
- 副本被分配给“实例”变量。
- 构造了 myClass 的第二个副本。它无法启动可执行文件,因为端口正在使用中
- 新副本分配给“实例”变量
- 第一个副本不再有任何引用,并调用其删除方法。这释放了端口。
什么样的解决方法是可能的?
理想情况下,我希望第 5 步只知道它需要提前运行:
- 构造了 myClass 的第一个副本。端口没有问题
- 副本被分配给“实例”变量。
5. 第一个副本不再有任何对它的引用,并调用它的删除方法。这释放了端口。
- 构造了 myClass 的第二个副本。港口也是免费的!
- 新副本分配给“实例”变量