今天偶然间看到一个博客 关于对象指针的,里面的说法和我以前理解的内存管理的知识有很大的不同。
class persion;persion apersion;persion* pa=&apersion; //指向类persion对象的指针
**类对象**是在内存中为这个类的分配**一块内存**,指针就是指这块一块内存的开始!对象只能事先定义好,
只能在定义的区域内使用,生命周期有限,而指针可以在使用时创建,使用的范围为全局,
可以保存只到你不在使用他时再删除。
指针就是一个整数,这个整数就是一个地址,这个地址是某个数据块的地址,通过它,可以访问那块内存,
总之,指针就是地址了。类的对象:用的是内存栈,是个局部的临时变量.类的指针:用的是内存堆,是个永久变量,
除非你释放它.**当类是有虚函数的基类,Func是它的一个虚函数,则调用Func时:**
**类的对象:调用的是它自己的Func;****
**类的指针:调用的是分配给它空间时那种类的Func;要发挥虚函数的强大作用,必须使用指针来访问对象.
-by任智康
这个是博客里面的内容和我以前的理解有比较大的出入。
我所理解的内存管理的知识是:
实例化对象的时候 为这个对象分配的内存是在堆区, 其他的局部变量存放在栈区,指向对象的指针也存放在栈区 ,
代码结束的时候所有局部变量被回收,指向对象的指针也被回收。 对象的内存有程序人员释放。
一脸懵逼的样子去问了问李帅,他的解释是:你说的是显示 new 出来的对象A a =new A()。截图里说的 是声明的对象 A a;
是不是好像没听懂,好吧,我也没看懂。然后自己找了一圈,又找到个好东西。
,
这样一来帅哥的解释就能看懂了,A a; A *a = new a();
两种方式皆可实例化,无new时,是在栈内分配内存, 而一般情况下的实例化对象时是在堆区内分配内存,且必须用delete释放内存。 而栈区内分配的内存由系统自动释放。