我是靠谱客的博主 玩命摩托,这篇文章主要介绍MATLAB 面向对象编程(七)析构函数delete,现在分享给大家,希望可以做个参考。

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

  • 什么情况下会调动析构函数
    1 当一块内存没有句柄指向时
复制代码
1
2
3
4
5
6
7
8
9
10
a = Point(); a = []; % 会调用a的析构函数 a = Point(); clear a; % 会调用a的析构函数 a = Point(); b = a; a = []; % 不会调用析构函数
  1. 当内存被销毁时
复制代码
1
2
3
4
a = Point(); b = a; delete(a); % 调用析构函数

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

  1. 当对象离开作用域的时候
复制代码
1
2
3
4
function test() a = Point(); end % test运行完后会调用a的析构函数

  • 何时自定义delete
复制代码
1
2
3
4
5
6
7
8
9
10
classdef A % Value类 properties fID = fopen('file.txt') end methods function delete(obj) fclose(obj.fID); end end end
复制代码
1
2
3
4
5
6
7
8
9
10
11
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();没有显示出来。

最后

以上就是玩命摩托最近收集整理的关于MATLAB 面向对象编程(七)析构函数delete的全部内容,更多相关MATLAB内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部