我们知道在c中alloc/free是一对,c++中new/delete是一对,但它是对指针操作的,问题:对对象如何释放呢?
例如:
A* a=new A();
delete a;
上面是对指针释放。
----
如果B b,那么b怎么释放呢,不能用delete了吧???求解中!!!
------------
答案:对象可以存放在heap中,也可以在stack中,而release只对存放在heap中的对象有效。存放在stack中的对象,不需要显示的release。
而要想操作heap中的对象,在C++里有两种方式,通过 引用 或者 指针。于是当你想release some objects,
一定是通过malloc/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++的底子都忘光了。查资料。。
如果函数体想放回一个对象,有
参考:/zhanghefu/article/details/5003407
/topics/390314416