面向对象程序设计中对象生存期和作用域的疑惑--------------------------- o的作用域并没有结束,这是托管代码的自动拉圾处理功能带来的好处,这和C语言不同。自动拉圾处理会再适当的时候来处理掉o这个对象的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 o这个名字的对象引用的作用域与生存期都是在这个函数中,但是通过new的对象实体的作用域在本函数中,但一旦被外部变量引用,其实体仍然有效,也就是它的生存期不确定,超出其作用域,有的C#书会专门讲这个的,当没有引用在引用它的实体,gc就会废弃它,这时再到它的生存期终点,但具体时间只有gc知道 谢谢Aaron_Lau(根本英俊)的回答,但还是有些不明白o的作用域没有结束?那么作用域是如何定义的?作用域和生存期是不是同时结束的? gogogo(嘿嘿),有点清楚了那么在C++中对象是不是在它的作用域结束时调用析构函数的,如果是那这个方法该如何写 c++其实也是在生存期结束时调用析构函数,不过它是即时调用,和C#不同,所以C#不推荐多使用析构函数来释放资源,而用Dispose显示调用.C++class a{ a(int i) {} ~a() { }}f(){ a a1(1);}a f1(){ a a2(2); return a2;}在f结束时就调用a的析构函数在f1结束时就不调用a的析构函数 非常感谢gogogo(嘿嘿) 的耐心讲解,还想讨教个问题:在f1中的a是不是必须等到我们手工析构才会销毁,传说中的内存泄露是不是就在这种情况下忘了析构而造成的? 对于托管代码推荐使用Dispose,不使用Finalize你只要让类实现IDisposable接口就可以了 请问如何将一个01字符串转换为数字 错误:并非所有的代码路径都返回值 xml操作! 记得编译器会自动联接字符串,求证一下 .net的困惑 关于水晶报表打印问题....... 如何实现直线围绕一端点旋转? 初级问题 求助:将16进制0x3a如何转化为字符串'0x3a' 一个字符串解析的问题 在线等待 对了就送分 初学者的弱智问题,还请大虾们指点! 可不可以在类外定义一个常量 ,像c++一样 专门弄个.h的头文件放这些常量 如何将C#与VB.Net整合在一个项目中?
o的作用域没有结束?那么作用域是如何定义的?作用域和生存期是不是同时结束的?
那么在C++中对象是不是在它的作用域结束时调用析构函数的,如果是那这个方法该如何写
C++
class a
{
a(int i)
{}
~a()
{
}
}f()
{
a a1(1);
}
a f1()
{
a a2(2);
return a2;
}
在f结束时就调用a的析构函数
在f1结束时就不调用a的析构函数
在f1中的a是不是必须等到我们手工析构才会销毁,传说中的内存泄露是不是就在这种情况下忘了析构而造成的?
推荐使用Dispose,不使用Finalize
你只要让类实现IDisposable接口就可以了