первое не совпадает со вторым.
в данном конкретном случае они , вероятно, приведут к тому же результату. однако , точка может легко реализовать оператор присваивания для new Point
и сделать что-то «другое» (у меня нет книги, поэтому я не знаю всех деталей). кроме того, оператор присваивания должен делать то, что вы ожидаете ... однако thePoint может быть контейнером (например, умным указателем), который может (по какой-то странной причине) вести себя иначе при использовании initialization(Point)
против default initialization followed by assignment
.
эти детали, скорее всего, не будут иметь значения в этом случае, но они влияют на порядок инициализации и выполнение. разница будет важна, когда ваши программы будут расти. тогда инициализация займет время, и вы захотите убедиться, что объекты инициализированы правильно: что они построены правильно (в первый раз) и что они построены в правильном порядке. Наиболее очевидный случай: будет иметь значение, когда конструктор по умолчанию будет отличаться от конструктора с параметрами, особенно когда конструктор производит распределение или имеет другие трудоемкие (или поведенчески разные) побочные эффекты.
И, поскольку мы делаем это в конструкторе, какие значения присваиваются для int x и int y?
, который полностью зависит от конструктора Point
.
Должны ли мы записывать значения, введенные из x и y в новой точке (x, y)? Или это правильно?
предпочтительным способом (для большинства команд) является использование списка инициализации и формальных конструкторов, где это возможно, и написание ваших типов для поддержки правильной инициализации. Есть много тонкостей, которые проявляются, когда кодовые базы растут. этот конструктор использует список инициализации:
HeapPoint::HeapPoint(int x, int y): thePoint(new Point(x,y)) { }
правильная инициализация может потребоваться в гипотетическом случае, если вы хотите объявить thePoint следующим образом:
const Point* const thePoint;
первый const
означает, что вы не можете изменить Точку (например, Point.x
или Point.y
). Второй констант означает, что вы не можете назначить новое распределение для переменной. тривиальные примеры для примера в OP, но, безусловно, полезные по мере роста ваших программ.