我只是想在这里确认区别,以此为例:
class Gate
{
public:
Gate(); //Constructor
void some_fun();
private:
int one, two;
ptr p1;
Gate* next;
};
typedef Gate* ptr;
Gate::Gate()
{
one = 0;
two = 0;
}
void Gate::some_fun()
{
p1 = new Gate;
p1 = p1->next;
p1 = new Gate();
}
在我的例子中,我创建了2个“Gate”的新节点,它们之间的唯一区别是第一个节点没有初始化变量“one和two”,而第二个节点没有。
答案 0 :(得分:10)
C ++有两类类型:POD和非POD(“POD”代表“普通旧数据”......有点误导性提示)。
对于非POD,new T
和new T()
之间存在无差异。差异仅影响POD,new T
没有初始化内存,而new T()
将默认初始化它。
So what are PODs?所有内置的C ++类型(int
,bool
...)都是。
此外,某些用户定义的类型也是如此。 Their exact definition is somewhat complicated但是对于大多数用途来说,足以说POD不能有自定义构造函数(以及某些其他函数),并且其所有数据成员本身都必须是POD。有关更多详细信息,请参阅链接的FAQ条目。
由于您的课程不是POD,因此两项操作都是相同的。