gpt4 book ai didi

MATLAB - 使用 'clear' 时运行对象析构函数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:59 25 4
gpt4 key购买 nike

假设我有一个类 myClass < handle .来自 Mathworks Help page on clear ,

Clearing handle graphics handles does not remove the objects themselves, nor does deleting the objects remove variables storing their handles.

hf = figure;  % Creates figure object, stores handle in variable hf
delete(hf) % Removes figure object, but not the variable hf
clear hf % Removes hf from the workspace; figure could still exist

所以 clear除非我明确 delete,否则处理句柄对象不会将其从内存中删除它首先..

我为 myClass 指定了一个析构函数进行适当的清理并删除对它的一些引用;未调用此析构函数 clear .是否可以在我的对象被清除时调用该析构函数?

编辑:我应该提一下 delete使用 clear 自动调用如果没有对 myClass 的引用对象,我还有一个类,比如说 myOtherClass具有引用 myClass 的属性,说 myOtherClass.a . myOtherClass 中还有其他属性这不是 myClass 的属性, 但如果 myOtherClass.a 它们应该是空的也是空的。如果这没有意义,请告诉我,这可能有点太罗嗦了。

最佳答案

清除对句柄类对象的所有引用会将其从内存中删除,并且在对象被销毁时将自动调用 myClass 上的 delete 方法。不幸的是,这只是令人困惑的术语。您的 myClass 是一个“MCOS 类”或“MCOS 对象”,而不是像 help clear 所说的那样的“处理图形对象”。它们是不同的东西,至少在 M 代码级别。

句柄图形“对象”与您的 myClass 不是同一类型的“对象”,figure() 返回的“句柄图形句柄”与您从中继承的名为 handle 的类。 help clear 中关于“处理图形句柄”的段落不适用于您的对象。请参阅 doc handle 并点击相关 doco 的 delete 方法的链接。

不要难过; Matlab doco 并没有把这些区别说得很清楚。 (IIRC 它甚至没有明确使用术语“MCOS”;它只是称它们为“对象”。)基本上,doco 中“面向对象编程”部分下的 Material 与“对象”的种类相关,并且“处理”您正在处理的 myClass。 “图形”和“GUI 开发”下的 doco 正在谈论另一种处理图形的“对象”和“句柄”。我认为他们使用术语“句柄”来表示句柄图形内容,使用“句柄类”来表示 OOP 内容。

要验证您的delete 是否有效,只需创建一个简单的类即可。

classdef myClass < handle
methods
function delete(obj)
disp('delete was called');
end
end
end

然后创建一个并清除它。

>> x = myClass
x =
myClass handle with no properties.
Methods, Events, Superclasses
>> clear x
delete was called
>>

如果您的析构函数未被调用,则可能存在对该对象的其他引用。每次清除保存对象引用的变量时都不会调用析构函数,只有在清除最后一个保存引用(或间接引用)的变量时才会调用。

关于MATLAB - 使用 'clear' 时运行对象析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com