首先
int *p = new int;
第二
class A{};
A *pa = new A;
new和编译器如何确定何时调用构造函数?在第一种情况下,编译器不生成调用p的构造函数的代码,在第二种情况下,它生成代码来调用A的构造函数。使用哪种机制来做出这样的选择?
答案 0 :(得分:7)
编译器知道A是一个类,因为它已经看到了类声明,所以它使用了合成的默认构造函数。它知道int是一个int,因为语言语法说它是。
答案 1 :(得分:6)
在你的情况下,A也是POD。要了解POD的正确定义,请查看this。
就代码而言,编译器知道int是内置类型,并且没有任何构造函数。
编辑: 您的问题很奇怪。编译器知道哪个类型是一个pod,哪个不是,它也知道哪个是内置的而不是内置的,因为它是编译器编译你的代码:)如果编译器不知道那些信息,谁将?