📜  C++中的new vs运算符(1)

📅  最后修改于: 2023-12-03 15:29:53.819000             🧑  作者: Mango

C++中的new vs运算符

在C++中,创建对象有两种方式:使用new运算符和使用类似于函数调用的运算符。这些运算符看起来很相似,但它们执行的操作并不一样。本文将介绍C++中的new运算符和类似于函数调用的运算符、它们的区别以及如何使用它们。

new运算符

new运算符是用来在程序运行时动态地对内存进行分配的,用于创建对象时,它会执行以下操作:

  1. 分配一块内存,以存储对象的数据成员
  2. 调用对象的构造函数,设置默认值
  3. 返回指向新分配内存的指针

以下是使用new创建一个对象的示例:

MyClass* obj = new MyClass();

此时,内存中已经分配了MyClass的新实例,并将指针obj指向该实例。在使用完对象后,应该用delete运算符释放内存:

delete obj;

注意:使用new分配内存的对象必须使用delete运算符进行删除。否则,会导致内存泄漏。

类似于函数调用的运算符

C++中还有一种创建对象的方式,这种方式像函数调用一样,是由C++的类构造函数的特性支持的。它是通过继承的方式来实现的,并且不能像new一样动态地创建对象。以下是使用类似于函数调用的运算符创建对象的示例:

MyClass obj;

此时,MyClass的构造函数被调用,在内存中分配了存储对象数据成员的一块内存,并且将对象初始化为默认值。这个对象是在栈上的,是在函数调用完后自动销毁的。

需要注意的是,使用类似于函数调用的运算符创建的对象只有在栈上才有意义,它不能在堆上分配内存,并且不能在作用域之外使用。

new运算符和类似于函数调用的运算符的区别
  1. new运算符使用时需要手动释放内存,而类似于函数调用的运算符会自动释放内存。
  2. new运算符可以在堆上动态地分配内存,而类似于函数调用的运算符只能在栈上分配内存。
  3. new运算符返回指向分配内存的指针,而类似于函数调用的运算符直接返回对象。
如何选择new运算符和类似于函数调用的运算符
  1. 如果需要在堆上动态地创建对象,则必须使用new运算符。
  2. 如果只是需要在栈上创建对象,则可以使用类似于函数调用的运算符。如果需要在函数调用结束时自动清除对象,则建议使用类似于函数调用的运算符。
  3. 通常,在需要动态创建数组时必须使用new运算符。
总结

new运算符是C++中一个重要的运算符,可以用于动态地分配内存,创建对象,并在完成后自动释放内存。类似于函数调用的运算符也可以用于创建对象,但只能在栈上分配内存,不能动态地分配内存。在选择上述两种运算符时应该考虑实际情况并根据需要选择。