MATLAB Answers

Handle object does not beheave as expected

1 ビュー (過去 30 日間)
Jannis Carstens
Jannis Carstens 2018 年 10 月 31 日
コメント済み: Jannis Carstens 2018 年 11 月 1 日
classdef myClass < handle
properties (Access = private)
pointerObjects = [];
end
methods (Access = public)
function obj = myClass()
obj.setPointers();
end
function setPointers(obj)
obj.setPointers.p1 = libstruct( [..]);
obj.setPointers.p2 = libpointer( [..]);
end
function clearPointers(obj)
clear obj.setPointers.p1;
clear obj.setPointers.p2;
clear obj.setPointers;
end
end
end
I have a custom class myClass, which is defined as a handle class. The method setPointers creates some libstruct and libpointer objects and stores them in a property. This works fine. However, I can not clear/free these objects to successfully unload the DLL, to which the structs and pointers belong.
If I call the method clearPointers, the objects are cleared in clearPointers workspace, but when the the function is left, they are still present in the instance of the myClass object. This causes unloadlibray to terminate with the error "outstanding objects".
I expected, that the clear does clear the objects in the myClass instance and not only in the methods workspace because myClass is derived from the handle class.
How can I clear those objects (and only those)?
Regards Jannis

  0 件のコメント

サインイン to comment.

採用された回答

Philip Borghesani
Philip Borghesani 2018 年 10 月 31 日
To clear a property set it to [] instead of using the clear function. Clear only works for variables in the workspace not part of a variable.
obj.pointerObjects.p1=[]; ... % or
obj.pointerObjects=[]; %clear/release all pointerObjects
I am guessing here, your example has at least one glaring error: you have a method named setPointers and a property named pointerObjects I think you meant to use the property inside of your methods?
Libpointers and libstructs are a form of handle object. Any copies of them will add a reference to the same object.

  1 件のコメント

Jannis Carstens
Jannis Carstens 2018 年 11 月 1 日
I reduced the example to the only aspect, which did not work. Using the structs/pointers in other methods works as expected.
Setting pointerObjects = []; worked out! Thanks ;)

サインイン to comment.

その他の回答 (0 件)

サインイン してこの質問に回答します。

製品


リリース

R2018a

Translated by