POD和用户定义数据类型之间的区别有多大?

时间:2010-12-17 11:15:46

标签: c++ new-operator

首先

int *p = new int;

第二

class A{};

A *pa = new A;

new和编译器如何确定何时调用构造函数?在第一种情况下,编译器不生成调用p的构造函数的代码,在第二种情况下,它生成代码来调用A的构造函数。使用哪种机制来做出这样的选择?

2 个答案:

答案 0 :(得分:7)

编译器知道A是一个类,因为它已经看到了类声明,所以它使用了合成的默认构造函数。它知道int是一个int,因为语言语法说它是。

答案 1 :(得分:6)

在你的情况下,A也是POD。要了解POD的正确定义,请查看this

就代码而言,编译器知道int是内置类型,并且没有任何构造函数。

编辑: 您的问题很奇怪。编译器知道哪个类型是一个pod,哪个不是,它也知道哪个是内置的而不是内置的,因为它是编译器编译你的代码:)如果编译器不知道那些信息,谁将?