- 感谢,这篇文章对我的解惑,我只是当做笔记,全部copy了,加深自己的印象;
C++ new对象与直接声明对象区别
刚开始使用基本数据类型的时候,相信大家都是直接像下面这样直接声明变量。
int a;
double b;
- 在学习了对象之后,发现可以用两种方式声明对象。
class Person{
//略
}
int main(){
Person p1;
Person *p2 = new Person();
return 0;
}
-
那么这两种方式有什么不同点呢?
- 1.new出来的对象必须用指针接收,需要显示的delete销毁
- 2.内存位置不同
-
直接定义:
Person p1; 这样产生的p1 对象在栈空间。
-
new对象
Person *p2 = new Person(); 这样产生的p1对象再堆空间。
主要区别
1:效率问题
- 直接定义效率更高,频繁调用的场合并不适合new,总要去申请释放内存系统开销更大。
2: 作用范围
- new出来的对象指针可以在方法之间传递,并且这个对象指针所指向的堆中的对象实例仍然存在,
- 直接声明的对象是局部的,出了方法就没有了。
3: 内存分配时机
- 使用普通方式创建的类对象,在创建之初就已经分配了内存空间。
- 类指针,如果未经过对象初始化,则不需要delete释放。
- ps : 记住,指针有2大特性: 值和类型
Person *p2 = NULL;
- 此时不需要delete,delete就错了,不知道指针初始值指向那里,会有意想不到问题出现。