德国开元华人社区 开元周游

标题: 请教一个C++问题 [打印本页]

作者: Guest    时间: 3.9.2003 20:55
Class Obj {<br>  int i;<br>  ...<br>};<br><br>Obj* get() {<br>  Obj* a = new Obj();<br>  return a;<br>}<br><br>Obj* b = get();<br><br>b-&gt;i 到底是不是 a-&gt;i ?<br><br>我觉得理论上应该是相等的,但经过上千次的类似运行后(程序比较大,这里只是关键部分),居然出现了Speicherzugriffsfehler,debug时发现b-&gt;i是不能access的,这是怎么回事?如果两个指针所指的不同,没道理在崩溃前那么多次同样的计算可以成功.(感觉compiler是random的).<br><br>  
作者: gm_jwl    时间: 3.9.2003 22:46
只用过JAVA,类似问题不应出现,JAVA中有垃圾回收机制,而C++不会主动回收,如果产生上千个实例,可能会有这种读取错误出现。另外a只是局部变量,没用的。<br>Obj* get() {<br>return new Obj();<br>}<br>这样写也行吧?
作者: 匿名    时间: 4.9.2003 18:41
先谢谢答复&#33;&#33;<br>其实我的get中并没有new一个Obj,那样写是为了说明返回的的确是个Obj*.<br><br>说到garbage collector,怎么才能完全delete一个List?其自带的clear()只能把该List中的elements消除掉,而List本身所占的memory并没有被free掉.因为程序超大,所以不得不人工释放memory. (想想Java编程真是舒服,这些问题都不用考虑太多.)
作者: gm_jwl    时间: 5.9.2003 11:45
用free或delete不行吗,应该能释放掉的,另外,如果程序过大,可考虑分成几个模块,分别编译,似乎可节省一点。也可考虑重新设计结构(纯粹个人想法)
作者: 无双    时间: 7.9.2003 04:48
这应该自己删除啊<br>c++中stl对指针并不是拥有关系而是认识关系<br><br>拥有关系就是当它不用时删除经<br><br>认识关系就是当它删除时不管<br><br>如<br>添加<br>list &lt;obj*&gt; a;<br>for(int i = 0 ; i&lt; 10 i++ ){<br>  a.pushback(obj.get());<br>}<br><br>释放<br>for (list &lt;obj*&gt;::iterator iter =  a.begin();iter &#33;= a.enc(); iter ++)<br>  delete iter;   //这里清茶内存 因为是使用get得到 所以要使用delete删除<br>a.clear();<br><br><br>java中是使用引用机制 <br>声明一个变量指向这对象时引用数+1<br>如果一个对象引用数为0那么会删除 <br>




欢迎光临 德国开元华人社区 开元周游 (https://bbs.kaiyuan.cn/) Powered by Discuz! X3.2