德国开元华人社区 开元周游
标题:
请教一个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->i 到底是不是 a->i ?<br><br>我觉得理论上应该是相等的,但经过上千次的类似运行后(程序比较大,这里只是关键部分),居然出现了Speicherzugriffsfehler,debug时发现b->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
先谢谢答复!!<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 <obj*> a;<br>for(int i = 0 ; i< 10 i++ ){<br> a.pushback(obj.get());<br>}<br><br>释放<br>for (list <obj*>::iterator iter = a.begin();iter != 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