Конструктор против нового - PullRequest
4 голосов
/ 30 марта 2012

Я просто хотел подтвердить разницу здесь, возьмем это в качестве примера:

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", и единственная разница между ними заключается в том, чтопервый узел не имеет инициализированных переменных «один и два», а второй -.

1 Ответ

10 голосов
/ 30 марта 2012

C ++ имеет два класса типов: POD и не POD («POD» означает «простые старые данные»… несколько вводящий в заблуждение намек).

Для не POD существует нет разница между new T и new T().Разница влияет только на POD, для которых new T не инициализирует память, тогда как new T() будет инициализировать ее по умолчанию.

Так что же такое POD ?Все встроенные типы C ++ (int, bool…).

Кроме того, некоторые определенные пользователем типы также. Их точное определение несколько сложное , но для большинства целей достаточно сказать, что POD не может иметь пользовательский конструктор (а также некоторые другие функции), и все его члены-данные сами должны быть POD.Для получения дополнительной информации см. Связанную запись FAQ.

Поскольку ваш класс не является POD, обе операции идентичны.

...