C++ new对象与直接声明对象区别

427 阅读1分钟

参考

  • 感谢,这篇文章对我的解惑,我只是当做笔记,全部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就错了,不知道指针初始值指向那里,会有意想不到问题出现。