C ++中的“new”关键字出了什么问题?

时间:2011-01-17 19:27:37

标签: c++ pointers object

我知道这可能听起来像是一个愚蠢的问题,但为什么我会收到类似“

”的错误
  

无法将Object *转换为Object

“当我尝试使用语句”

实例化一个新对象时
Object obj = new Object();

“?

我是否理解“ new ”关键字是为指针保留的?还是别的什么?

6 个答案:

答案 0 :(得分:38)

Object* obj = new Object();

new总是返回指向对象的指针。

如果只写Object obj,则表示obj将保留对象本身。如果它在函数内部以这种方式声明,则内存将在堆栈上分配,并在离开该函数后将被擦除。 new在堆上分配内存,因此可以从函数返回指针。请注意,指针也可以指向本地(堆栈)变量。

答案 1 :(得分:8)

由于new返回一个指针,你应该使用

Object *obj = new Object();

答案 2 :(得分:6)

完全。 New在堆上创建一个对象,返回一个指向它的指针

答案 3 :(得分:6)

new运算符生成指向对象的指针

Object *obj = new Object()应该有效。

但只是Object obj()构造对象就好但在堆栈空间

答案 4 :(得分:6)

对象obj;

就是你所需要的。它创建了对象obj。

答案 5 :(得分:1)

我会简单地留下评论,但显然我需要某个代表才能这样做。

在Java中,用于存储对象的变量是隐式指向Object的指针。所以new在C ++中的工作方式与Java相同,但是你没有在Java中意识到它。我猜这就是你混淆的原因。