C#这个析构函数怎么理解?

问题描述

privateIHookHelperm_pHookHelper;privateboolm_check;staticexternboolDeleteObject(IntPtrhObject);~Pan(){if(m_hBitmap.ToInt32()!=0)DeleteObject(m_hBitmap);m_check=false;m_pHookHelper=null;}

解决方案

解决方案二:
你确定这是C#?我怎么看着像C++
解决方案三:
引用1楼Z65443344的回复:

你确定这是C#?我怎么看着像C++

嗯,这是一个自定义工具类里面的一个东西,看不懂
解决方案四:
析构函数是GC在释放一个对象时调用的一个特定的函数,在这个函数里通常只用于释放非托管资源,例如你的代码里,DeleteObject函数用于删除一个GDI的Bitmap对象。
解决方案五:
privateIHookHelperm_pHookHelper;privateboolm_check;staticexternboolDeleteObject(IntPtrhObject);~Pan(){if(m_hBitmap.ToInt32()!=0)//这个应该是判断m_hBitmap这个对象的内存是否存在DeleteObject(m_hBitmap);//这个应该是释放内存m_check=false;m_pHookHelper=null;}最后两个应该不用解释了吧,这个应该是调用了c++的链接库,而C++的内存C#无法直接释放。所以在析构的时候做了这个操作。就是把内存释放掉

时间: 2024-09-04 05:57:23

C#这个析构函数怎么理解?的相关文章

理解finalize()-析构函数替代者

函数 理解finalize()-析构函数替代者   在许多方面,Java 类似于 C++.Java 的语法非常类似于 C++,Java 有类.方法和数据成员:Java 的类有构造函数: Java 有异常处理.       但是,如果你使用过 C++ 会发现 Java 也丢掉一些可能是你熟悉的特性.这些特性之一就是析构函数.取代使用析构函数,Java 支持finalize() 方法.       在本文中,我们将描述 finalize() 与 C++ 析构函数的区别.另外,我们将创建一个简单的 A

理解finalize()-析构函数的替代者

在许多方面,Java 类似于 C++.Java 的语法非常类似于 C++,Java 有类.方法和数据成员:Java 的类有构造函数: Java 有异常处理. 但是,如果你使用过 C++ 会发现 Java 也丢掉一些可能是你熟悉的特性.这些特性之一就是析构函数.取代使用析构函数,Java 支持finalize() 方法. 在本文中,我们将描述 finalize() 与 C++ 析构函数的区别.另外,我们将创建一个简单的 Applet 来演示 finalize() 是如何工作的. 最终的界限 与 J

理解PHP5中static和const关键字

php5|关键字 PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) staticstatic关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护.类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方

C#中构造函数和析构函数的用法

函数 摘 要:构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误.本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项. 关键字:构造函数:析构函数:垃圾回收器:非托管资源:托管资源一.构造函数与析构函数的原理 作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性.C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙.但是程序通过了编译检查并不表示错误已经

对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会

编程 Finalize 和Dispose(bool disposing)和 Dispose() 的相同点: 这三者都是为了释放非托管资源服务的. Finalize 和 Dispose() 和Dispose(bool disposing)的不同点: Finalize是CRL提供的一个机制, 它保证如果一个类实现了Finalize方法,那么当该类对象被垃圾回收时,垃圾回收器会调用Finalize方法.而该类的开发者就必须在Finalize方法中处理 非托管资源的释放. 但是什么时候会调用Finali

《Effective C++》读书笔记08:别让异常逃离析构函数

这节和异常有关,这一块是我不太熟悉的,只能先把自己理解的记录下来. 1 class Widget 2 { 3 public: 4 5 ~Widget() {} //假设这里会吐出一个异常 6 }; 7 8 void doSomething() 9 { 10 std::vector<Widget> v; 11 12 }//v在这里自动销毁 上面的代码中,假设v含有10个Widget,如果在前面几个的析构函数中弹出异常,则程 序会过早结束或者出现不明确行为. 确实不鼓励在析构函数中抛出异常,可是如

对IDisposable接口的理解

本人最近接触一个项目,在这个项目里面看到很多类实现了IDisposable接口.在我以前的项目中都很少用过这个接口,只知道它是用来手动释放资源的.这么多地方用应该有它的好处,为此自己想对它有进一步的了解,但这个过程远没有我想象中的简单. IDisposable接口定义:定义一种释放分配的资源的方法. .NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资

我所理解的Remoting(2):远程对象生命周期的管理[上篇]

1.CLR的垃圾回收机制 在.NET中提到对象的生命周期,我们会不由自主地想到CLR的垃圾回收.在运行一个.NET程序过程中,我们通过某种方式,比如通过new操作符,通过反序列化,通过反射机制,创建一个对象,CLR在为这个对象在托管堆中开辟一块内存空间.随着程序的运行,创建的对象越来越多,托管堆中的可用的内存越来越少,必须有一种机制来判断被分配在托管堆中的对象那些已经不被使用,以及进行对这些对象占用的内存进行回收.这种机制被称为CLR自动内存管理,也就是我们常说的垃圾回收.为了说清楚远程对象的生

对Object类中方法的深入理解

看一下API中关于Object的介绍: 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类. 所有对象(包括数组)都实现这个类的方法. 那么Object中到底有哪些方法,各自有什么应用呢? 这个问题也经常出现在面试中,如果平时没有关注,可能很难回答好,这里简单整理一下. 首先看一下java.lang.Object的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2