информационная безопасность
без паники и всерьез
 подробно о проекте
За кого нас держат?Spanning Tree Protocol: недокументированное применениеГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Критическая уязвимость UEFI позволяет... 
 Японский хостинг попросил клиентов... 
 Компрометация eMudhra вынудила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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 }
Короче оператор присваивания в данном случае не используется, так что перегружать его нет необходимости.
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach