6

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

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

A a;

只有构造函数被调用吗?还是new隐式使用了运算符?

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

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

4

2 回答 2

8

在第一种情况下,如果a不是全局变量,则将其放入堆栈,而b将其放入堆中。

在第一种情况下,只调用构造函数。new除非你像第二种情况那样明确地调用它,否则永远不会调用它。

于 2012-08-20T18:04:09.577 回答
6

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

于 2012-08-20T18:05:32.257 回答