c++ 对象释放

来源:互联网 发布:hbo直播软件 编辑:程序博客网 时间:2024/04/25 18:10
============================================================博文原创,转载请声明出处蓝岩--移动互联网老兵============================================================先来看一个问题。。。------------我们知道在c中alloc/free是一对,c++中new/delete是一对,但它是对指针操作的,问题:对对象如何释放呢?例如:A*a=newA();deletea;上面是对指针释放。----如果B b,那么b怎么释放呢,不能用delete了吧???求解中!!!
------------
答案:对象可以存放在heap中,也可以在stack中,而release只对存放在heap中的对象有效。存放在stack中的对象,不需要显示的release。
而要想操作heap中的对象,在C++里有两种方式,通过 引用 或者 指针。于是当你想release some objects,
一定是通过malloc/delete某个指针来做的
Class A{    ...};Class B{    ...};...A* a = new A();//new 出来的指针,放在堆中,需要手动delete;(malloc 和 free 也是这样)B b;//对象b,存放在栈中,离开生存周期后,系统会自动释放其占用的内存空间
-------------那么什么是堆,什么是栈呢?
栈(stack),在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
堆(heap),就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
----------------用IOS多了,我在想,如果函数中想返回一个对象,我在函数体中new一个A,我该在哪里delete呢,C++又不像ObjC有计数器。。。哎,c/c++的底子都忘光了。查资料。。如果函数体想放回一个对象,有

参考:http://blog.csdn.net/zhanghefu/article/details/5003407http://bbs.csdn.net/topics/390314416