c++中创建对象的几种方法

来源:互联网 发布:数据归一化 实例 编辑:程序博客网 时间:2024/05/16 18:37
2011-05-07 11:58

c++中类的创建对象的方法有两种

首先,只有创建了类的对象,才能调用类中的动态的成员(包括成员变量和成员函数),其创建对象的方法有两种:一种直接用类名创建对象,如有一个类为:

class CAT

{public:

 a();

 b();

...

};

void main ()

{

CAT cat;

cat.a();

...

return 0;

}

另一种方法是用new的方法

class CAT

{public:

 a();

 b();

...

};

void main ()

{

CAT *cat=new a();

cat->a();

...

return 0;

}

两种方法的区别,引用别人的贴来加以解释:

问:

创建对象时, 

> > 直接用类名定义的对象   和   用   new   出来的对象有什么区别啊? 
new出来的需要delete,不用new的就不需要吗? 
其他的还有什么区别? 

> > 如果定义了一个   typedef   CArray <CString,CString>   strArray; 
要向strArray的对象中添加元素,并希望   return   strArray   的对象, 
应该如何定义strArray的对象呢? 
必须要   strArray*   obj   =   new   strArray();   吗? 
这样能return   obj   吗? 

用后也需要delete吧?


答:

不用new,则生成的对象保存在栈区,用new生成的对象在堆区,栈区比较小,堆区比较大,很多临时变量什么的和函数调用什么的都要用到栈区,所以为了不占用太多的栈区,大点儿的程序生成对象都在堆区。在栈区不属于用户管理的范围,生成对象在程序结束后自动调用系统喜购函数析构掉,没有内存泄漏,而堆区属于用户管理范围,如果你用了new,则堆区就会申请一块儿放下你的对象的内存,如果你不显式调用delete,程序运行完以后那块儿内存还是属于这个对象,这块儿内存其他的程序就不能再访问了,如果你程序运行次数比较多或者生成对象比较多,则会占用越来越多的内存,最后导致没有内存可以使用,系统崩溃!