在C ++中,关于对象创建,隐式使用了新的吗?

时间:2012-08-20 18:00:42

标签: c++ oop

当我创建一个类的对象时,比如说,

class A {
  public: A() {}
};

A a;

是否只调用构造函数?或者隐含使用new运算符?

就像我们必须做A* b = new A();

一样

此外,ab将存储在内存中的哪个位置?堆栈还是堆?

2 个答案:

答案 0 :(得分:8)

在第一种情况下,如果a不是全局变量,那么它将被放入堆栈,而b将被放在堆上。

在第一种情况下,只调用构造函数。除非您在第二种情况下明确地执行此操作,否则永远不会调用new

答案 1 :(得分:6)

不会隐式调用newnew返回指向所创建对象类型的指针,而构造函数调用则没有返回类型。使用new创建的对象将存在于堆上。 New将分配内存,然后调用构造函数。以A a形式创建的对象将存在于堆栈中(除非它们是全局变量)。