本帖最后由 zhehan54 于 2009-08-29 00:54:35 编辑

解决方案 »

  1.   

    怎么是两个不同的东西了?
    DbConnectCreater 这个方法返回的是一个对象还是对象的指针 ?DbConn=accessDb.DbConnectCreater();
    DbConn 中存的是指针 ?
    Dispose 释放的是存在堆里的实际对象 还是 栈里的地址 ?
      

  2.   

    1.如果没有看错的话,一个类使用的连接是另外一个类创建并返回的,那么它们实际上是两个不同的引用,但引用了同一个对象。
    2.复制引用,压入栈中,返回,调用方法从栈中取出返回值。这里面没有什么指针。
    Dispose一般是销毁实际的对象。
      

  3.   


    指针,是指向 DbConnection conn = new OracleConnection(); 所生成生成的对象的指针。当然是释放堆中的对象。要是直接抹掉了栈里的地址,那样留在堆里的资源就变成无法管理的。
      

  4.   

    当然释放
    DbConnection conn = new OracleConnection();
    定义了一个引用对象,并分配空间
    return conn; 然后用定义了一个引用DbConn,通过DbConn=accessDb.DbConnectCreater();
    将DbConn指向conn相同的内存单元。对OracleConnection进行Dispose() 应该也要释放DbConn
      

  5.   


    综合两位的见解通过复制应用之后,栈里面就存在了两个不同引用
    而这两个引用都指向同一个内存单元,也就是实际存储new OracleConnection() 的对象的单元那按照qling717  的意思
    我都要对两个引用实现Dispose()方法
    那么 Dispose的都是同一个对象
    那 对象被先引用Dispose的引用释放之后
    后面的那个再用Dispose释放这个对象 ,会不会有异常 ?
    因为这个对象已经被先前的释放掉了 
      

  6.   

    在一个地方Dispose就够了,第二次Dispose会有异常的。