其神若何,月射寒江。

c++之创建对象

上一篇 / 下一篇  2010-06-28 17:30:33 / 个人分类:开发技术

创建c++对象

c++创建对象,有两种方法。不同的

的方法在内存中区域不一样。这个不同于java,java的对象都是在堆中的。

l        方法一

 

>>ClassName object(param);

>>这种方法创建的对象,内存分配是分配到栈中的

C++缺省创建和撤销,自动调用构造函数和析构函数

栈的内存一般比较小,如果对象比较大,容易栈内存溢出。

>>该方法创建的对象调用类方法时,必须用“.

而不能用“->.myRec.getArea();

 

这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。

注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。

例如,我定义了一个这样的类:

 

class Rec

{

  public:

  Rec(int width,int height);

  ~Rec();

  int getArea();

 

  private:

  int Rwidth;

  int Rheight;

};

 

当你Rec myRec(5,5);这样创建一个myRec对象,然后打印出sizeof(myRec);的时候,会得到8这个结果。

因为myRec中有2int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。

 

 

l        方法二

 

>>ClassName *object=new ClassName(param);

delete object;

>>是在堆上分配内存来创建对象

  一般对象比较大的情况,用该方法创建,除非物理内存不够,否则就不会溢出。

>>newdelete运算符作用的存储区域

  New开辟内存空间,调用构造函数

 Delete删除堆内存,调用析构函数。

>>new创建的对象不是用“*”或“.

来访问该对象的成员函数的,而是用运算符“->

 

 

这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);

不同的是,C++new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new动态创建的对象必须用delete来撤销该对象。

只有delete对象才会调用其析构函数。

 

注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->;

 

例如:Rec *rec=new Rec(3,4);

 

     rec->getArea();

 

     delete rec;

 

顺便提一下:

 

一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,

栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的

存储空间,在c++中就是指newdelete运算符作用的存储区域。


TAG: 对象

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 39766
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar