![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Станислав |
|
|||
|
Unregistered |
кто-нибудь пробовал создать такую очень полезную вещь, как контейнер, содержащий автоматические узазатели на объекты?
если да, то опишите, плз., как вы это делали? у меня проблема. вот мой фрагмент: //----------------------------------------------------------------------------- class TTreeLevelNode { public: typedef std::auto_ptr < TTreeLevelNode > TChildAP; typedef std::vector < TChildAP > TTreeLevelChildren; // ... TTreeLevelNode * AddChild (TTreeLevelInfo & AData); void DeleteChildren (void); // ... protected: // ... TTreeLevelChildren Children; }; // ... TTreeLevelNode * TTreeLevelNode::AddChild (TTreeLevelInfo & AData) { TChildAP p (new TTreeLevelNode (AData, TreeView, this)); Children.push_back (p); // ОШИБКА ЗДЕСЬ!!! return p.get(); } //----------------------------------------------------------------------------- а ошибки следующие: [C++ Error] vector.cc(118): E2285 Could not find a match for 'auto_ptr<TTreeLevelNode>::operator =(const auto_ptr<TTreeLevelNode>)' [C++ Warning] memory.stl(193): W8037 Non-const function std::auto_ptr<TTreeLevelNode>::operator std::auto_ptr<TTreeLevelNode>::auto_ptr_ref<TTreeLevelNode>() called for const object [C++ Error] memory.stl(860): E2015 Ambiguity between 'auto_ptr<TTreeLevelNode>::operator auto_ptr<TTreeLevelNode>::auto_ptr_ref<TTreeLevelNode>()' and 'auto_ptr<TTreeLevelNode>::auto_ptr_ref<TTreeLevelNode>::auto_ptr_ref(auto_ptr<TTreeLevelNode> &)' djgpp дает аналогичные сообщения (что-то по поводу потери квалификатора при преобразовании из 'const auto_ptr <...>' в 'auto_ptr <...> &' |
|||
|
||||
| varnie |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
читай http://www.gotw.ca/publications/using_auto...effectively.htm
подобное сделать нельзя (и хороший компилятор должен адекватно об этом известить). почему нельзя -- читай статью. тема много где обсуждалась. вместо этого используй std::vector< boost::shared_ptr<T> > или подобное, но не с std::auto_ptr |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
varnie, не хорошо сообщения накручивать, занимаясь некропостингом..
|
|||
|
||||
| varnie |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.9.2007 Репутация: 0 Всего: 0 |
vinter
верите нет, мне по-барабану на все эти статусы и прочие финтифлюшки=) я бы их вообще все отменил, была бы моя воля... то что я ответил на старый пост я уже сам понял, но уже после того как отпостил ответ. если бы вы обратили внимание, то увидели бы что я новичок на этом форуме (неск. дней всего здесь, ввиду хорошего коммунити по с++), а потому нек. оплошности, думаю, мне простительны на первых порах. а ответил я потому, что нашел тему без ответа, и решил, что будет полезно ответить. вотс. ps: с замечанием в принципе согласен, впредь буду обращать внимание на "устаревшесть" топиков. |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
все нормально имхо
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
можно, поскольку у std::auto_ptr есть конструктор копирования и оператор присваивания, другое дело, что результат будет не тем, который ожидается |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
ANSI ISO/IEC 14882:1998, 20.4.5 par. 3. А мужики-то не знают... © -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
можно Добавлено через 1 минуту и 57 секунд попробуй написать что то вроде этого:
код скомпилируется но работать не будет, вернее работать он будет, но не так как нужно а так как не нужно |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
попробуй, студия это не компилит. компилит :( никогда не читал стандарт, подобное написано то ли у Майерса, то ли у Джосьюттиса, то ли у Страуструпа, мне их слова достаточно,чтобы не рыскать по стандарту. очень странно, я знаю точно что у меня такое не компилилось, сейчас проверил в 2008 студии - схавало Это сообщение отредактировал(а) vinter - 11.7.2008, 23:19 |
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Поскольку то, что ты сказал, абсолютно неверно, то и читая Мейерса-Джасттиса-Страуструпа, ты просто не смог верно понять их слов. А со ссылками на то, чего не читал, я был бы поаккуратней.
Это сообщение отредактировал(а) Ulysses4j - 11.7.2008, 23:05 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
лечить меня не надо да ну? апрям таки абсолютно? если написано , это всего лишь значит, что не смогли придумать как по человечески поставить заглушку, на использование этого класса в контейнерах. Так что это как минимум синоним запрета. А в книгах я видимо видел, что собираются внести в стандарт, или нечто подобное, что отложилось в памяти как запрещено стандартом |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
В книжках говорится о том, что std::auto_ptr можно и нужно использовать, но для хранения в стандартных контейнерах он не предназначен. Поэтому не надо пытаться делать из них вектор или что-нибудь еще, так как результат может быть любым.
|
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
bsa, мы, видимо, разные книжки читаем. Те книжки, которые читал я, говорили, что это довольно дурацкий класс и пирменять его имеет смысл, когда нужны строгие гарантии относительно исключений, а по возможности лучше пользоваться умными указателями с более прозрачным поведением.
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ссылкой не подтвержу, но, ЕМНИП, использовать std::auto_ptr в контейнерах STL либо не рекомендуется, либо запрещено. Из-за copy-destructive семантики.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |