用C ++创建一个对象

时间:2010-04-15 17:39:26

标签: c++ new-operator

 A a = new A();   // A is a class name

应该在C ++中工作吗?

我得到了:

  

从'A *'转换为非标量   输入'A'请求

这行代码有什么问题?


这适用于Java,对吗?

另外,在C ++中创建A类型的新对象的正确方法是什么呢?

6 个答案:

答案 0 :(得分:9)

不,不是。新操作返回指向新创建的对象的指针,因此您需要:

A * a = new A();

您还需要在代码中的其他位置管理对象的删除:

delete a;

然而,与Java不同,通常不需要在C ++中动态创建对象,并且只要有可能,您应该避免这样做。而不是上述,你可以简单地说:

A a;

,编译器将为您管理对象的生命周期。

这是非常基本的东西。您使用哪种C ++教科书并不涵盖它?

答案 1 :(得分:2)

new A()返回指针A*。你可以写

A a = A();

使用默认构造函数创建一个临时实例,然后为一个甚至更好的方法调用复制构造函数:

A a;

只使用默认构造函数创建一个。或者,如果你想要一个指针,你可以写

A* a = new A();

可以让您更灵活,更有责任感。

答案 2 :(得分:2)

当您想要实例化指向对象的指针时,使用关键字new

A* a = new A();

它被分配到堆上..当你没有指针而只是一个真正的对象时,你只需使用

A a;

这声明了对象并将其实例化到堆栈中(因此它将在调用内部处于活动状态)

答案 3 :(得分:1)

您需要A* a= new A();

new A();创建并构造类型为A的对象并将其放在堆上。它返回该类型的指针。

换句话说,new返回对象放在堆上的地址,A*是一种类型,用于保存A类型对象的地址

只要您将堆与new一起使用,就需要在地址上调用关联的delete

答案 4 :(得分:1)

new为您提供指向所创建对象的指针,因此:

A *a = new A();

答案 5 :(得分:1)

首先,new返回一个指针,因此你需要将a的类型声明为'A *'。 其次,与Java不同,在A:

之后不需要括号

A * a =新A;