value類與handle類析構(gòu)函數(shù)的區(qū)別
value類
- value類沒有析構(gòu)函數(shù)屈尼,自己定義的delete函數(shù)不會由MATLAB自動調(diào)用,只能由用戶手動調(diào)用obj.delete()李滴。
handle類
- handle類對象離開其作用域時觉义,會自動調(diào)用delete。
- 重載的delete函數(shù)必須具有以下幾點:
- 方法的名字叫delete慨仿。
- 方法沒有返回值久脯。
function delete(obj)
···
end
- 方法只接受一個參數(shù)(參數(shù)不能是varargin),且該參數(shù)必須是 對象obj本身镶骗。
- 方法不允許是Sealed桶现、Static或Abstract,但可以是private(這樣不能在外部顯式地直接調(diào)用delete方法)鼎姊。
如果不滿足以上任何一點骡和,還可以作為一個普通方法調(diào)用相赁,但不會被MATLAB自動調(diào)用。
- handle類delete調(diào)用后會釋放該obj指向的數(shù)據(jù)慰于,不會銷毀此obj钮科,但它會變?yōu)橐粋€無效的句柄,可以重新賦值婆赠。
h1=handle();
h2=handle();
h1.delete(); %銷毀h1指向的數(shù)據(jù)绵脯;
h1=h2; %給h1重新賦值;
h2.delete(); %銷毀h1和h2共同指向的數(shù)據(jù)休里;
- MATLAB銷毀局部handle對象(如在函數(shù)中沒有被輸出的對象)時不會影響另一個指向相同數(shù)據(jù)的handle類對象蛆挫,只是把數(shù)據(jù)上的引用計數(shù)減一。
- 并非所有局部對象離開了作用域后都會被自動銷毀(User-Manager Object)妙黍。
- 子類調(diào)用delete方法時悴侵,會強制調(diào)用基類delete方法,即使基類delete方法被生命成了私有Access=private拭嫁。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者