对象会被自动析构吗?

大狗狗 2008-11-18 08:27:54
一个循环:
for(...)
{
string str = new string(char数组);
...
}

由于char数组的不同,string对象也要随之变化。那么str的生存期是不是仅为一个循环期间?
在新的new操作前,旧的string对象是不是就被运行时自动析构?

或者问一下:

如何用一个char数组动态的改变string对象内容?(即用一个char数组给已有的string对象赋值,不是在构造时使用)如有办法,就不用考虑上面的问题了。
...全文
172 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovehongyun 2008-11-19
  • 打赏
  • 举报
回复
你那样写str的生存周期就是你的{}内

如何用一个char数组动态的改变string对象内容?(即用一个char数组给已有的string对象赋值,不是在构造时使用)如有办法,就不用考虑上面的问题了。
你可以字符串直接相加,或是可以用StringBuilder

String 对象本身就是是 Char 结构的序列集合

Code従業員 2008-11-19
  • 打赏
  • 举报
回复
出了大括号就释放了,我非常爽.NET这点
dreamsnake 2008-11-19
  • 打赏
  • 举报
回复
string类型的特殊性,决定了你不需要过多的考虑效能问题。
大狗狗 2008-11-19
  • 打赏
  • 举报
回复
多谢各位回贴支持!那么我的代码是可用的了?
大狗狗 2008-11-19
  • 打赏
  • 举报
回复
多谢大家回贴,可惜分不多,小弟在此诚心谢了!以后还望大家多多关照:)
cellblue 2008-11-18
  • 打赏
  • 举报
回复

bbbbbb888888 2008-11-18
  • 打赏
  • 举报
回复
IDispose接口.然后实现.可以手动调用Dispose
huoxudong125 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hulihui 的回复:]
.NET虽然有~的语法,但已经不是析构函数的意义了,其本质是终结者:Finalizer()。这个函数是在CLR垃圾回收时执行。如果编写了类的这个函数,那么在执行时可以调用GC.Collect()观察到Finalizer()被执行的情况。但空间到底啥时候回收,还是不确定。
[/Quote]
ok
长沙三毛 2008-11-18
  • 打赏
  • 举报
回复
.NET虽然有~的语法,但已经不是析构函数的意义了,其本质是终结者:Finalizer()。这个函数是在CLR垃圾回收时执行。如果编写了类的这个函数,那么在执行时可以调用GC.Collect()观察到Finalizer()被执行的情况。但空间到底啥时候回收,还是不确定。
bloodish 2008-11-18
  • 打赏
  • 举报
回复
不确保在new新的string之前,旧的string就被回收了
直接通过char数组赋值,不支持
bloodish 2008-11-18
  • 打赏
  • 举报
回复
不确保在new新的string之前,旧的string就被回收了
直接通过char数组赋值,不支持
acqy 2008-11-18
  • 打赏
  • 举报
回复
楼主不必担心,不必惊慌。.NET下析构函数确实存在,而且是在垃圾回收的时候被调用。由于你不知道垃圾回收机制什么时候回收这个不需要的对象,因此你也没有办法确定你的析构函数什么时候被调用。所以,要做cleanup操作的话,请使用Dispose方法。。。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧