此代码中的对象在堆或者栈或者内存中如何引用 的? 本帖最后由 zhehan54 于 2009-08-29 00:54:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么是两个不同的东西了?DbConnectCreater 这个方法返回的是一个对象还是对象的指针 ?DbConn=accessDb.DbConnectCreater();DbConn 中存的是指针 ?Dispose 释放的是存在堆里的实际对象 还是 栈里的地址 ? 1.如果没有看错的话,一个类使用的连接是另外一个类创建并返回的,那么它们实际上是两个不同的引用,但引用了同一个对象。2.复制引用,压入栈中,返回,调用方法从栈中取出返回值。这里面没有什么指针。Dispose一般是销毁实际的对象。 指针,是指向 DbConnection conn = new OracleConnection(); 所生成生成的对象的指针。当然是释放堆中的对象。要是直接抹掉了栈里的地址,那样留在堆里的资源就变成无法管理的。 当然释放DbConnection conn = new OracleConnection();定义了一个引用对象,并分配空间return conn; 然后用定义了一个引用DbConn,通过DbConn=accessDb.DbConnectCreater();将DbConn指向conn相同的内存单元。对OracleConnection进行Dispose() 应该也要释放DbConn 综合两位的见解通过复制应用之后,栈里面就存在了两个不同引用而这两个引用都指向同一个内存单元,也就是实际存储new OracleConnection() 的对象的单元那按照qling717 的意思我都要对两个引用实现Dispose()方法那么 Dispose的都是同一个对象那 对象被先引用Dispose的引用释放之后后面的那个再用Dispose释放这个对象 ,会不会有异常 ?因为这个对象已经被先前的释放掉了 在一个地方Dispose就够了,第二次Dispose会有异常的。 求思路 如何知道insert數據入數據庫 需時多少 怎么求fixed数组的长度? 用C#根据XML指定节点下的值查询该节点,怎么查? AccessSource C#窗体问题 怎样用c#程序实现二级域名? 如何为标准控件添加自定义属性? VSTO中powerpoint放映时需要有一个工具条,各位大虾知道怎么做吗 用c#写一个数据库插入和更新的类,急用 这些代码为什么要这样写呢? HttpContext.Current.Request.Url 怎样得到父窗口的地址?
DbConnectCreater 这个方法返回的是一个对象还是对象的指针 ?DbConn=accessDb.DbConnectCreater();
DbConn 中存的是指针 ?
Dispose 释放的是存在堆里的实际对象 还是 栈里的地址 ?
2.复制引用,压入栈中,返回,调用方法从栈中取出返回值。这里面没有什么指针。
Dispose一般是销毁实际的对象。
指针,是指向 DbConnection conn = new OracleConnection(); 所生成生成的对象的指针。当然是释放堆中的对象。要是直接抹掉了栈里的地址,那样留在堆里的资源就变成无法管理的。
DbConnection conn = new OracleConnection();
定义了一个引用对象,并分配空间
return conn; 然后用定义了一个引用DbConn,通过DbConn=accessDb.DbConnectCreater();
将DbConn指向conn相同的内存单元。对OracleConnection进行Dispose() 应该也要释放DbConn
综合两位的见解通过复制应用之后,栈里面就存在了两个不同引用
而这两个引用都指向同一个内存单元,也就是实际存储new OracleConnection() 的对象的单元那按照qling717 的意思
我都要对两个引用实现Dispose()方法
那么 Dispose的都是同一个对象
那 对象被先引用Dispose的引用释放之后
后面的那个再用Dispose释放这个对象 ,会不会有异常 ?
因为这个对象已经被先前的释放掉了