踏雪有痕-静态对象和动态对象





一、   在c++中,对象可以静态分配——即编译器在处理程序源代码时分配,也可以动态分配——即程序执行时调用运行时刻库函数来分配。
    静态与动态内存分配的两个主要区别是:
          1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接的对它进行操作。
          2、静态对象的分配和释放由编译器自动处理,程序员不需要做任何事情。相反,动态对象的分配与释放,必须由程序员显示的管理,通过new和delete两个表达式完成。

   
关于第一句话,如何理解呢? 编译器怎么可能在编译时就分配内存?
   

二、对象的动态分配可以通过new表达式的两个版本之一来完成。
    第一个版本用于分配特定类型的单个对象。例如:    
             int  *pint = new int(1024);
    分配一个没有名字的int类型的对象,初始值为1024,然后返回对象在内存中的地址,并用这个地址初始化指            针对象pint。对于动态分配的内存,唯一的访问方式是通过指针间接访问。
    第二个版本是用户分配特定类型和维数的数组。例如:  
             int *pia = new int [4];
    分配一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显示的制定一个初始值。
    分配动态数组返回值只是一个指针,与分配单一动态对象的返回类型相同。例如,pint和pia的不同之处在于,pia拥有四元素数组的第一个元素的地址,而pint只是简单的包含单一对象的地址。

    可以通过delete的两个版本释放内存。
    单一对象的delete表达式如下:
       delete pint;
    数组形式的delete表达式如下:
       delete  [] pia;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值