“析”字,我容易理解为“分析”,好象是最开头的事,但析字本身都是分开的含义,以后,我应该多记这个词语“分崩离析”。析构函数是与构造函数相对应的,一个构造,一个销毁。看帮助文档里面,对析构函数的条条框框还是挺多的:
·一个类只能有一个析构函数;
·析构函数必须与类同名;
·无法继承或重载析构函数;
·无法调用析构函数,它们是被自动调用的;
·析构函数即没有修饰符,没有参数,也没有返回值;
·如果类没显式的析构函数,系统会自动构建一个空的;
实例:
·写成public ~point()...,结果编译器提示:修饰符“public”对该项无效
·写在void ~point()...,结果编译器提示:类、结构或接口成员声明中的标记“~”无效
·写成~point(int i)...,结果编译器提示一堆:应输入 )、应输入 ;……
·~point内部写上一句return false;,结果编译器提示:由于“point.~point()”返回void,返回关键字后面不得有对象表达式
本来想写一个构造函数占用内存,然后析构函数释放内存的代码,但自己缺太多,写不出来。如占用内存,本来想用int[] a=new int[700000];这个语句,但发现有它没它,程序运行时也一样占10M左右。如果数组的量再大些,则编译没有问题,但运行时,建立对象后立即就销毁,没有任何出错提示,原因未知。
如何销毁对象,我使用的是p=null;,有没有效果不得而知。另外用{}的代码段中定义对象,出了代码段,对象也会无效,但这样也不会执行析构语句。要让系统执行析构语句真难。
测试用的代码如下:
using System;
class m
{
static void Main()
{
{point p=new point();
p=null;}
Console.ReadLine();
}
}
class point
{
// int[] a=new int[700000];
~point()
{
Console.WriteLine("unload");
}
}
class m
{
static void Main()
{
{point p=new point();
p=null;}
Console.ReadLine();
}
}
class point
{
// int[] a=new int[700000];
~point()
{
Console.WriteLine("unload");
}
}