构造函数与新的

时间:2012-03-30 18:04:17

标签: c++ class pointers new-operator typedef

我只是想在这里确认区别,以此为例:

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”,而第二个节点没有。

1 个答案:

答案 0 :(得分:10)

C ++有两类类型:POD和非POD(“POD”代表“普通旧数据”......有点误导性提示)。

对于非POD,new Tnew T()之间存在差异。差异仅影响POD,new T没有初始化内存,而new T()将默认初始化它。

So what are PODs?所有内置的C ++类型(intbool ...)都是。

此外,某些用户定义的类型也是如此。 Their exact definition is somewhat complicated但是对于大多数用途来说,足以说POD不能有自定义构造函数(以及某些其他函数),并且其所有数据成员本身都必须是POD。有关更多详细信息,请参阅链接的FAQ条目。

由于您的课程不是POD,因此两项操作都是相同的。