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

Mic*_*ins 5 c++ pointers object

我知道这可能听起来像一个愚蠢的问题,但为什么我会收到一个错误,上面写着"

无法将Object*转换为Object

"当我尝试使用语句实例化一个新的对象时"

Object obj = new Object();
Run Code Online (Sandbox Code Playgroud)

"?

我是否理解" new "关键字是为指针保留的?或者是别的什么?

And*_*rey 38

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

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

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

  • @FrustratedWithFormsDesigner它是品味的问题,如果我不喜欢这种符号,我不会贬低.我个人更喜欢`Object*ob`,因为它看起来像一个类型.是的,我知道`Object*ob1,ob2`应该是`Object*ob1,*ob2`. (5认同)
  • @FrustratedWithFormsDesigner:对于C++来说这是非常惯用的(作为一个古老的C fart,`T*p`惯例让我烦恼,但我做的C++越多,我就越理解为什么它成为惯例).对我来说,这不是足够的理由进行投票. (4认同)

Fed*_*oca 8

因为new返回指针,你应该使用

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

  • @Thomas:`Object*obj`怎么样?;-) (5认同)

Hil*_*row 6

究竟.New在堆上创建一个对象,并返回指向它的指针.


Bra*_*ram 6

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

那里Object *obj = new Object()应该工作.

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

  • `Object obj();`声明一个名为`obj`的函数,它不带参数并返回一个`Object`. (6认同)

Ric*_*ton 6

对象obj;

是你所需要的全部.它创建了对象obj.

  • 可能这就是他所需要的; 但我们不能把它视为理所当然. (2认同)