Легенда:
   новое сообщение
    закрытая нитка
    новое сообщение
    в закрытой нитке
    старое сообщение
         
		 | 
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
 - Новичкам также крайне полезно ознакомиться с данным документом.
   
  |   |   | 
[C++] Действительно моя  29.10.03 19:36  Число просмотров: 1471
 Автор: amirul <Serge> Статус: The 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
  }
 Короче оператор присваивания в данном случае не используется, так что перегружать его нет необходимости.
 | 
 
 
  
 
 | 
 |