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

原创 2007年10月16日 11:36:00




一、   在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;

C++ 对象的静态类型与动态类型

在C++当中:因为出现了继承: 继承导致对象的指针和引用具有两种不同的类型: 静态类型 和 动态类型 。 静态类型 :指针或者是引用声明时的类型。 动态类型 :由他实际指向的类型确定。  ...
  • djb100316878
  • djb100316878
  • 2014年12月04日 14:19
  • 1561

c++中对象动态建立与静态建立的区别和应用

C++中建立类的对象有两种方式: (1)静态建立,例如 A a;      静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。 (2)动态建立,例如...
  • Don_sandman
  • Don_sandman
  • 2017年09月21日 00:32
  • 379

Java静态对象和非静态对象有什么区别??

Java静态对象和非静态对象有什么区别?? 对于静态方法,相信它的作用在各位朋友眼里也是不容置疑的,那么他跟非静态到底有什么区别呢??? 到底有什么好处呢??对于静态方法来说~...
  • lipeng88888888
  • lipeng88888888
  • 2017年11月07日 20:43
  • 244

动态分配类对象与静态分配类对象

动态分配类对象:就是使用运算符new来创建一个类的对象,在堆上分配内存。 静态分配类对象:就是A a,由编译器创建类对象,在栈上分配内存。 1)动态分配类对象 把类的构造函数和析构函数设...
  • Stony_Confident
  • Stony_Confident
  • 2016年09月16日 15:21
  • 749

C++实现只能动态或者静态创建对象

C++如何实现类对象只能动态分配或只能静态分配C++中建立类的对象有两种方式: (1)静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是...
  • yiyele
  • yiyele
  • 2017年09月02日 22:36
  • 11066

踏雪有痕-指针

1、每个指针都有一个相关的类型,不同数据类型的指针之间的区别不是在指针的表示上,也不是在指针所持有的值地址上——对所有类型的指针这两方面都是相同的。    不同之处在于指针所指的对象的类型上,指针的...
  • VictorZH
  • VictorZH
  • 2007年10月18日 09:42
  • 368

踏雪有痕-变量初始化

如果变量在全局域中定义,那么系统会保证给它提供初始值0;如果变量在局部域中定义或通过new表达式动态分配的,则系统不会提供初始值0。这戏对象被称为未初始化的(与他关联的内存区中含有一个随机的位串,可能...
  • VictorZH
  • VictorZH
  • 2007年10月17日 16:48
  • 411

静态对象和非静态对象的区别

Java静态对象和非静态对象有什么区别??       静态对象                 vs          非静态对象    是类共同拥有的              |      是...
  • zhaoshi1987
  • zhaoshi1987
  • 2016年05月10日 14:26
  • 330

踏雪有痕- 类型转换

1、隐式类型转换     c++定义了一组内置类型对象之间的标准转换,由编译器隐式的应用到对象上。    (1)在混合类型的算术表达式中,最宽的数据类型成为目标转换类型。        顺序如下:do...
  • VictorZH
  • VictorZH
  • 2007年10月22日 10:51
  • 384

踏雪有痕-数组

1、 数组定义必须制定维数值(显式初始化例外,下面讨论),且维数值必须是常量表达式,也就是说必须是能在编译时刻计算出的值,非const的变量不能用作数组维数。   2、同变量一样,全局数组定义后系统会...
  • VictorZH
  • VictorZH
  • 2007年10月19日 09:42
  • 467
收藏助手
不良信息举报
您举报文章:踏雪有痕-静态对象和动态对象
举报原因:
原因补充:

(最多只允许输入30个字)