Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
[C++] А вот неправда твоя (iirc) 29.10.03 18:54 Число просмотров: 1290
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> Компилятор сам скажет, что тебе надо. То бишь при наличии > хоть одного (любого) конструктора, конструкторы побитового > копирования не создаются. При наличии любого объявленного конструктора не создается конструктор по умолчанию. А чтобы не создался конструктор копирования, нужно специально его объявить, но не определить. То же самое относится и к оператору присваивания.
|
<programming>
|
[C++] как правильно делать std::vector::push_back? 29.10.03 08:07
Автор: Nutteno Статус: Незарегистрированный пользователь
|
Есть, например, класс CClass. Если я делаю так: "std::vector<CClass>clazzz;"
Нужно ли мне перегружать operator= для CClass, если захочу потом воспользоваться clazzz.push_back?
|
|
[C++] Если у тебя будет хоть один конструктор 29.10.03 11:07
Автор: amirul <Serge> Статус: The Elderman
|
> Есть, например, класс CClass. Если я делаю так: > "std::vector<CClass>clazzz;" > Нужно ли мне перегружать operator= для CClass, если захочу > потом воспользоваться clazzz.push_back? Компилятор сам скажет, что тебе надо. То бишь при наличии хоть одного (любого) конструктора, конструкторы побитового копирования не создаются. Насколько я понимаю, побитовое присвоение тоже не производится
|
| |
[C++] А вот неправда твоя (iirc) 29.10.03 18:54
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> Компилятор сам скажет, что тебе надо. То бишь при наличии > хоть одного (любого) конструктора, конструкторы побитового > копирования не создаются. При наличии любого объявленного конструктора не создается конструктор по умолчанию. А чтобы не создался конструктор копирования, нужно специально его объявить, но не определить. То же самое относится и к оператору присваивания.
|
| | |
[C++] Действительно моя 29.10.03 19:36
Автор: amirul <Serge> Статус: The Elderman
|
> При наличии любого объявленного конструктора не создается > конструктор по умолчанию. А чтобы не создался конструктор > копирования, нужно специально его объявить, но не > определить. То же самое относится и к оператору > присваивания. Нет мне оправдания - пойду штудировать страуструпа. :-)
|
|
[C++] как правильно делать std::vector::push_back? 29.10.03 10:26
Автор: alien <Андрей> Статус: Member
|
> Есть, например, класс CClass. Если я делаю так: > "std::vector<CClass>clazzz;" > Нужно ли мне перегружать operator= для CClass, если захочу > потом воспользоваться clazzz.push_back? Думаю, что здесь необходима перегрузка конструктора копирования (если конечно есть необходимость в копировании данных, который этот класс размещает в динамической памяти).
Вот, кстати, код:
template <class _T1>
inline void
_Construct(_T1* __p)
// здесь вызывается конструктор копирования
{ new (static_cast<void*>(__p)) _T1(); }
...
...
void
push_back(const _Tp& __x)
{
if (_M_finish != _M_end_of_storage) {
_Construct(_M_finish, __x);
++_M_finish;
}
else
_M_insert_aux(end(), __x); // здесь тоже используется _Construct
}
Короче оператор присваивания в данном случае не используется, так что перегружать его нет необходимости.
|
|
|