美文网首页
关于内存管理的疑问

关于内存管理的疑问

作者: GrayWolf | 来源:发表于2016-04-20 17:19 被阅读0次

    今天偶然间看到一个博客 关于对象指针的,里面的说法和我以前理解的内存管理的知识有很大的不同。

    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释放内存。 而栈区内分配的内存由系统自动释放。

    相关文章

      网友评论

          本文标题:关于内存管理的疑问

          本文链接:https://www.haomeiwen.com/subject/zzozlttx.html