Object var和Object*var = new Object()之间的区别

Puy*_*ver 4 c++

如果我有一个名为Object的类,那么创建一个实例之间的区别是什么:

Object var;
Run Code Online (Sandbox Code Playgroud)

和:

Object* var = new Object();
Run Code Online (Sandbox Code Playgroud)

Bri*_*ndy 17

在这里,您将在堆栈上创建var:

Object var;
Run Code Online (Sandbox Code Playgroud)

所以在上面,var是实际的对象.


在这里,您将在堆上创建var(也称为动态分配):

Object* var = new Object()
Run Code Online (Sandbox Code Playgroud)

在堆上创建对象时,必须delete在使用它时调用它.也var实际上是保持类型的对象的存储器地址的指针Object.在内存地址存在实际对象.


有关更多信息:请参阅我的答案,了解堆栈和堆的内容和位置.

  • 注意`Object var();`声明一个函数`var`返回一个`Object`并且没有参数. (2认同)

Jam*_*lis 11

这个:

Object var();
Run Code Online (Sandbox Code Playgroud)

是函数声明.它声明了一个不带参数的函数并返回一个Object.你的意思是:

Object var;
Run Code Online (Sandbox Code Playgroud)

正如其他人所指出的那样,它创建了一个具有自动存储持续时间的变量(也就是在堆栈上).


Ara*_*raK 5

Object var();
Run Code Online (Sandbox Code Playgroud)

声明返回的函数Object.要创建自动对象(即在堆栈上):

Object var; // You shouldn't write the parenthesis.
Run Code Online (Sandbox Code Playgroud)

而:

Object* var = new Object();
Run Code Online (Sandbox Code Playgroud)

是动态分配的Object.