MATLAB 面向对象编程(七)析构函数delete

2025-12-09 05:59:28

无需关注,查看原文 Handle类除了构造函数以外还有析构函数,在对象离开作用域或者被销毁的时候会调用析构函数delete,在一般情况下不需要自定义delete方法,除了一些特殊情况下有些内存不能自己释放才需要手动释放。Value类没有析构函数,但是也可自定义一个delete方法显示调用,比如说a.delete().

什么情况下会调动析构函数 1 当一块内存没有句柄指向时

a = Point();

a = [];

% 会调用a的析构函数

a = Point();

clear a;

% 会调用a的析构函数

a = Point();

b = a;

a = [];

% 不会调用析构函数

当内存被销毁时

a = Point();

b = a;

delete(a);

% 调用析构函数

主要clear和delete的区别,clear a会删除a这个句柄,但是delete会删除a指向的内存。

当对象离开作用域的时候

function test()

a = Point();

end

% test运行完后会调用a的析构函数

何时自定义delete

classdef A % Value类

properties

fID = fopen('file.txt')

end

methods

function delete(obj)

fclose(obj.fID);

end

end

end

classdef B < handle % handle类

properties

fID = fopen('file.txt');

end

methods

function delete(obj)

fclose(obj.fID);

end

end

end

对于Value类而言,MATLAB不会自动调用delete(),需要用a.delete()显示调用,因此其实不一定类方法名不一定需要写成delete。Handle类对象会自动调用析构函数。

实际上在handle类的析构函数最后隐性调用了handle基类的析构函数,即在自定义的delete函数后还有一句:delete@handle();没有显示出来。

神仙道多少级可以打双龙
旱组词(88个词语)