C# part class 怎么析构函数

C# part class 怎么析构函数,第1张

多数情况下c#中用不到析构函数,但如果在class中启用了非托管性资源,那么建议在其析构函数中进行适当资源清理工作(此时结合Dispose模式会更好),这会使Net的自动垃圾回收和手动处理协调配合起来。
凡具有析构函数的class,其被识别为垃圾后,垃圾回收机制不会简单的进行回收处理,而是会将其加入到终结队列,再由第三方线程(因与主线程不存在数据冲突,故彼此可异步执行,不至应垃圾回收线程误了主程序的事)执行。编写析构函数要注意重点在清理非托管性资源,且不可将垃圾复活。

如果你不写析构函数,编译器会自动加上析构函数的主要处理一些内存的释放等等工作比如C++中,只有在构造函数中用了NEW,在需要自己写析构函数,DELETE掉new的空间一般情况是不用写析构函数的析构函数的写法是
~加上类名比如你的类名是boy,则构造函数是boy(){},析构函数是~boy(){}

这个析构函数问题不大,倒是构造函数和赋值运算符函数有点小问题:
它们中的
p=new char[k];
应改为
p=new char[k+1];
另外,赋值运算符函数中的处理和返回类型也不对,应该是这样的:
stri& operator=(char ch)//----------------------------赋值函数
{
delete[] p; //
k=strlen(ch);
p=new char[k+];
for(int i=0;i<k;i++)
p[i]=ch[i];
p[k]='\0';
return this;
}

在定义构造函数的头文件里先定义析构函数;
比如有
class CElementDlg : public CDialog
{
// Construction
public:
CElementDlg(CWnd pParent = NULL); // standard constructor
//析构函数定义就是
~CElementDlg();//~符号+类名就是析构函数名了

然后在你的cpp文件里对析构函数进行定义了;一般紧跟在构造函数下面定义
CElementDlg::~CElementDlg()
{
//在这里填上你的代码吧
}

1,在销毁对象的时候,执行它。
析构函数是“反向”的构造函数。它们在对象被撤消(回收)时调用。析构函数的名
称除了最前面的“~”符号外,与类的名称相同。例如,类String的析构函数是~string()。
析构函数通常用于当一个对象不再需要时,完成“消除”功能。
在函数中建立对象之后,这个对象作为局部对象开始生存,直到函数运行到遇见右括号“}”才结束生存,此时调用析构函数。
对象的释放发生在以下几种情况,首发自学编程网:
·使用运算符new分配的对象被delete删除。
·一个具有块作用域的本地(自动)对象超出其作用域。
·临时对象的生存期结束。
·程序结束运行。
·使用完全限定名显示调用对象的析构函数。
有几条规则约束着析构函数的说明:
·不能接受参量。
· 不能说明有任何返回类型(包括void)。
·不能用return语句返回值。
· 不能说明为const、volatile或static,但析构函数可以因说明为const、volatile或static的对象的析构而被调用。
·可以说明为虚拟的。使用虚析构函数,可以撤消对象而不必知道该对象的类型。由于使用虚拟函数机制,程序将调用该对象的正确的析构函数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12838382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存