Один вызывается при конструировании копированием, другой при явном вызове.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Объясните разницу между копиконструктором и operator=
От:
Аноним
Дата:
14.03.06 08:07
Оценка:
Здравствуйте, Rothmans, Вы писали:
R>Здравствуйте, <Аноним>, Вы писали:
А>>сабж
R>Один вызывается при конструировании копированием, другой при явном вызове.
А в реализации нет вообще никакой разницы?
Тогда почему не предусмотрено использование одного без реализации другого?
Re[3]: Объясните разницу между копиконструктором и operator=
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Rothmans, Вы писали:
R>>Здравствуйте, <Аноним>, Вы писали:
А>>>сабж
R>>Один вызывается при конструировании копированием, другой при явном вызове.
А>А в реализации нет вообще никакой разницы?
А>Тогда почему не предусмотрено использование одного без реализации другого?
Чегойто? Вроде можно один без другого.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Объясните разницу между копиконструктором и operator=
От:
Аноним
Дата:
14.03.06 08:11
Оценка:
Здравствуйте, Rothmans, Вы писали: R>Чегойто? Вроде можно один без другого.
Итого: сабж
Re: Объясните разницу между копиконструктором и operator=
Копирующий конструктор создает копию объекта, передаваемого ему в качестве параметра (по смыслу).
A a;
A b(a);
Фактически, если копирующий конструктор не объявлен для некоторого класса, при его вызове произойдет побитовое копирование исходного объекта (будет вызван копирующий конструктор по-умолчанию). Поэтому, чаще всего копирующий конструктор определяют явно или объявляют (часто без определения) в закрытой/защищенной секции класса.
Нужно заметить, что в следующем коде будет вызван именно конструктор копирования, а не конструктор + оператор присваивания.
A a;
A b = a;
Re: Объясните разницу между копиконструктором и operator=
От:
Аноним
Дата:
14.03.06 08:21
Оценка:
Здравствуйте, Аноним, Вы писали:
А>сабж
В конструкторе создаётся новый экземляр, который есть копия переданного в него
экземпляра. operator = предназначен для того, что бы скопировать данные из данного экземпляра в
уже существующий экземпляр, т.е. что бы сделать уже существуюший экземляр копией
данного. ИМХО.
Re[2]: Объясните разницу между копиконструктором и operator=
Здравствуйте, g_i, Вы писали:
g_i>Фактически, если копирующий конструктор не объявлен для некоторого класса, при его вызове произойдет побитовое копирование исходного объекта.
Конструктор копирования по умолчанию выполняет не побитовое, а почленное копирование (как и оператор присваивания по умолчанию — почленное присваивание), а это 2 большие разницы.
Любите книгу — источник знаний (с) М.Горький
Re[3]: Объясните разницу между копиконструктором и operator=
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, g_i, Вы писали:
g_i>>Фактически, если копирующий конструктор не объявлен для некоторого класса, при его вызове произойдет побитовое копирование исходного объекта.
B>Конструктор копирования по умолчанию выполняет не побитовое, а почленное копирование (как и оператор присваивания по умолчанию — почленное присваивание), а это 2 большие разницы.
Что то меня клинит, пояните пожадуйста, что имеется ввиду под почленным копированием?
Re[4]: Объясните разницу между копиконструктором и operator=
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Что то меня клинит, пояните пожадуйста, что имеется ввиду под почленным копированием?
B>Для каждого члена класса вызывается его собственный конструктор копирования.
Фу-у-у-уф.... Спасибо за пояснение, а то что-то я не то начал себе представлять В общем главное что всегда так и думал.
Re: Объясните разницу между копиконструктором и operator=
От:
Аноним
Дата:
15.03.06 09:09
Оценка:
Конструктор копирования еще используется неявно когда объект копируется по значению (если он не объявлен как explicit):
struct my_struct { /*...*/ };
void foo(my_struct);
void bar()
{
my_struct x;
foo(x); //copy contructor of my_struct is called
}
— Zigmar
Re[6]: Объясните разницу между копиконструктором и operator=
Здравствуйте, Аноним, Вы писали:
R>>Один вызывается при конструировании копированием, другой при явном вызове. А>А в реализации нет вообще никакой разницы?
Как это нет разницы?! Если в первом случае нужно создавать новый объект, а во втором — нет.
Re[2]: Объясните разницу между копиконструктором и operator=
Здравствуйте, g_i, Вы писали:
gg_i>Нужно заметить, что в следующем коде будет вызван именно конструктор копирования, а не конструктор + оператор присваивания. g_i>
g_i>A a;
g_i>A b = a;
g_i>
Вопрос по выделенному выражению:
А что должно произойти с точки зрения стандарта, если не доступен A( const A& ), но есть A() и A::operator = ( const A& )?
Будут ли они использованы для конструирования объекта?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Объясните разницу между копиконструктором и operator=
E>Вопрос по выделенному выражению: E>А что должно произойти с точки зрения стандарта, если не доступен A( const A& ), но есть A() и A::operator = ( const A& )? E>Будут ли они использованы для конструирования объекта?
Здравствуйте, Аноним, Вы писали: R>>Один вызывается при конструировании копированием, другой при явном вызове. А>А в реализации нет вообще никакой разницы?
Обычно один реализуют через другой.
class A
{
//....
};
A::A(const A&)
{
//....
}
const A& A::operator=(const A& init)
{
A temp(init);
this->swap( temp );
}