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