首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++创建一个对象的时候是否用new?该怎么处理

2012-05-28 
C++创建一个对象的时候是否用new??test t1(30,gxm)test *t2new test(30,gxm)这两行代码就是简单的

C++创建一个对象的时候是否用new??
test t1(30,"gxm");
test *t2=new test(30,"gxm");
这两行代码就是简单的创建一个对象,一个是声明,一个是在堆上分配内存空间,但是我没觉得在功能上有什么不一样,建立对象就是要访问类内的方法等信息,那什么时候声明对象用new,什么时候不用new呢?

[解决办法]
用不用new 主要是生命周期问题
new 的周期长,直到你用delete
不用的话短,系统在合适时自动收回(虽然给人的感觉这个要好,其实这个有时让人很郁闷,好只是个假像)

举个例子(A为一个类)

A test()
{
A a;
...//略
return a;//这样返回的话,可能你的程序就有大麻烦了,因为出了函数这个a就自动被销毁了
}

A test()
{
A a=new A;
...//略
return a;//这样就OK啦
}
[解决办法]

C/C++ code
new是在堆上,而lz第一种方式定义的是在栈上这涉及到堆栈的区别:简单的说,堆要靠程序员自己维护,要由开发人员来显示delete或者free内存,而栈上的,不用,系统自动回收@例子:int* fun(){    int i;    return &i;//这个i就是在栈上,而当fun返回的时候,i被释放,所以返回的是一个无意义的指针!}int* fun(){   return new int;//这个i就是在堆上,如果不显示delete,那么这块内存是永远存在的,不会因为fun返回而释放!这么返回的就是一个有效的指针!} 

热点排行