Должен ли я явно обнулить инициализацию auto_ptr? - PullRequest
4 голосов
/ 06 октября 2011

Некоторые из моих коллег предпочитают явно инициализировать std::auto_ptr до 0 в списке инициализации конструктора, но он будет инициализирован до 0 в своем конструкторе без какой-либо явной инициализации.Так есть ли причина делать это?

#include <memory>

class A
{
  A() : SomePtr(0)
  {
  }

private:
  std::auto_ptr<SomeType> SomePtr;
};

Ответы [ 3 ]

9 голосов
/ 06 октября 2011

Нет, конструктор по умолчанию std::auto_ptr делает именно это, поэтому делать это явно не нужно.В любом случае, это вопрос стиля, и вы должны быть последовательными.Например, вы бы явно вызвали конструктор по умолчанию для вектора-члена в списке инициализации конструктора?

В качестве примечания, std::auto_ptr устарела в следующем стандарте

0 голосов
/ 06 октября 2011

Одной из причин может быть ясность, но это должна быть единственная причина. Я сам предпочитаю не писать ненужную инициализацию, особенно если это полностью избавляет меня от написания конструктора по умолчанию для окружающего класса и просто позволяет компилятору выполнять свою работу. В то время как это просто вопрос стиля, я думаю, что чрезмерная паранойя даже наносит ущерб ясности кода.

0 голосов
/ 06 октября 2011

Психология.

Для встроенных типов вы, вероятно, уже знаете, они неинициализированы, если вы не сделаете это явно. Для классов это не так.

Стремление к согласованности приводит к явной инициализации везде. Это позволяет вам забыть, является ли A::SomePtr встроенным или типом класса. Имхо, довольно бесполезно, поскольку количество встроенных типов весьма ограничено.

...