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

时间:2010-06-16 13:53:25

标签: c++

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

Object var;

Object* var = new Object();

5 个答案:

答案 0 :(得分:17)

在这里你要在堆栈上创建var:

Object var;

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


这里你要在堆上创建var(也称为动态分配):

Object* var = new Object()

在堆上创建对象时,必须在使用它时调用delete。另外var实际上是一个指针,它保存Object类型对象的内存地址。在内存地址存在实际对象。


有关详细信息:See my answer here on what and where are the stack and heap

答案 1 :(得分:11)

此:

Object var();

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

Object var;

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

答案 2 :(得分:5)

Object var();

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

Object var; // You shouldn't write the parenthesis.

虽然:

Object* var = new Object();

是动态分配的Object

答案 3 :(得分:3)

Object var;

创建一个有效的Object,直到当前范围结束,通常直到'}'

Object* varp = new Object();

创建一个指向新创建的Object。指针(varp)在作用域的en d之前有效,但是对象本身一直存在,直到在指针上调用delete。

你应该总是喜欢第一个版本,除非有理由做第二个版本。第二个版本需要更多内存(你需要空间用于指针和对象),需要更多时间(系统需要在堆上分配内存),你需要确保调用delete以释放内存完成它。

答案 4 :(得分:1)

Object var();

在堆栈上分配对象,因此您不必解除分配

Object* var = new Object();

在堆上分配对象