当我创建一个类的对象时,比如说,
class A {
public: A() {}
};
A a;
是否只调用构造函数?或者隐含使用new
运算符?
就像我们必须做A* b = new A();
此外,a
和b
将存储在内存中的哪个位置?堆栈还是堆?
答案 0 :(得分:8)
在第一种情况下,如果a
不是全局变量,那么它将被放入堆栈,而b
将被放在堆上。
在第一种情况下,只调用构造函数。除非您在第二种情况下明确地执行此操作,否则永远不会调用new
。
答案 1 :(得分:6)
不会隐式调用new
。 new
返回指向所创建对象类型的指针,而构造函数调用则没有返回类型。使用new
创建的对象将存在于堆上。 New将分配内存,然后调用构造函数。以A a
形式创建的对象将存在于堆栈中(除非它们是全局变量)。