c++与c#的对象区别
几个月没动C#,以前的一个项目,带的一个毕业设计来问问题,结果自己写的当时
也没在意,现在看来还是要小心这个不同
举个小例子
对象A ,有属性 sa;
容器 c++的 是vector<A> ;c#的是 Arraylist :VA
做的事情是这样 循环添加对象
c++:
A a;
for (int i =0 ;i<10;++i)
{
a.sa =i;
VA.push_back(a);
}
copy(VA.begin(),VA.end(),ostream_iterator<A>(out,"\n"));
这个VA里面存的对象是很明显对象的sa属性是1~9;
但。。。
c#:
如果也在这声明A a 就麻烦了
for(int i =0;i<10;++i)
{
A a=new A();
// A a;这样声明也一样
a.sa =i;
VA.add(a);
}
如果犯了上面两个错误那么加到VA里面的就是对象的sa属性都是9。
原因是c#和java都是使用引用的,托管的代码必须要自己new才是新的对象。。。汗,
当初我是知道的啦。。这半年的c++弄的自己都糊涂了。
PS:另外还发现c#写的解析文本的速度似乎比c++不差,虽然都是debug,简单的读入文本,但
感觉还是c#快。。。60w行文本 tab分割的7列,取2,3 ,7列做一个对象加入容器,vector对
Arraylist,都加好了,居然c#先完成,没优化?我不知道。。。 我还没用List<T>呢。。。。
个例吧。。。。
也没在意,现在看来还是要小心这个不同
举个小例子
对象A ,有属性 sa;
容器 c++的 是vector<A> ;c#的是 Arraylist :VA
做的事情是这样 循环添加对象
c++:
A a;
for (int i =0 ;i<10;++i)
{
a.sa =i;
VA.push_back(a);
}
copy(VA.begin(),VA.end(),ostream_iterator<A>(out,"\n"));
这个VA里面存的对象是很明显对象的sa属性是1~9;
但。。。
c#:
如果也在这声明A a 就麻烦了
for(int i =0;i<10;++i)
{
A a=new A();
// A a;这样声明也一样
a.sa =i;
VA.add(a);
}
如果犯了上面两个错误那么加到VA里面的就是对象的sa属性都是9。
原因是c#和java都是使用引用的,托管的代码必须要自己new才是新的对象。。。汗,
当初我是知道的啦。。这半年的c++弄的自己都糊涂了。
PS:另外还发现c#写的解析文本的速度似乎比c++不差,虽然都是debug,简单的读入文本,但
感觉还是c#快。。。60w行文本 tab分割的7列,取2,3 ,7列做一个对象加入容器,vector对
Arraylist,都加好了,居然c#先完成,没优化?我不知道。。。 我还没用List<T>呢。。。。
个例吧。。。。
posted on 2007-05-11 22:23 康国庆--thinkinlove 阅读(906) 评论(5) 编辑 收藏 举报