Конструктор копирования - это конструктор с определенной подписью. Он принимает один параметр, const ссылается на тот же тип, который строится. Таким образом, для class Foo
, конструктор копирования выглядит следующим образом:
Foo::Foo(const Foo&)
Есть 2 другие виды конструкторов: по умолчанию и преобразования. Конструктор по умолчанию не принимает никаких параметров (или можно назвать, как если бы она не предпринимала никаких параметров, например, все параметры имеют значения по умолчанию):
Foo::Foo()
... и новообращенный деструктор в основном что-нибудь еще. Например:
Foo::Foo(const Bar&)
почему конструктор копирования вызывается?
В вашем случае, вы звоните в RailwayLineLink
конструктор, но переходящая в константной ссылке на RailwayLine
, так что вы на самом деле вызвать конструктор новообращенного, а не конструктор копирования.
Конструктор преобразования называется потому, что вы назвали его:
new RailwayLineLink(data);
Это создает новый объект RailwayLineLink
, передавая data
в качестве единственного параметра конструктору.
Если у вас есть пустой конструктор новообращенного, который выглядит примерно так:
RailwayLineLink::RailwayLineLink(const RailwayLine&)
{
}
... тогда все члены новой копии будет по умолчанию, построенные и, вероятно, содержит мусор.
Обычно при реализации конструктора копирования, вы хотите сделать какой-то почленно копию от оригинала к копии, как это:
RailwayLineLink::RailwayLineLink(const RailwayLine& rhs)
: value_(rhs.value_)
{
}
Привет, добро пожаловать в StackOverflow. В будущем, когда вы пишете код, вы должны выделить его и нажать на кнопку с двоичным кодом; это будет отформатировать его так, чтобы он отображался правильно. :-) –
Не видя конструктора 'RailwayLineLink', который вы используете, его трудно сказать, но он уверен, что« потому что вы просили его ». Поместите точку останова на пустой конструктор копирования (к какому классу вы спрашиваете, кстати?) И убедитесь, что столбец стоит. –
@Platinum Azure: WTF ?!Я добавил пробелы вручную для каждой строки кода, который я написал! ; ( – BlackBear