![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Royan |
|
||||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Хотел было задать вопрос а потом до самого дошло ;) быть может кому-то это сбережет час времени
Нерпавильный код:
Правильный код:
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||
|
|||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Пользуйся классами типа auto_ptr - таких проблем не будет.
Добавлено @ 14:51 http://msdn.microsoft.com/library/default....toptr_class.asp |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
auto_ptr, это CRT, а CRT в виндах я пытаюсь изжить, так как там и так процедур хватает, чтобы решить практически любую повседневную задач
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Что-то ты не то говоришь, Royan. auto_ptr - это шаблон специально разработанный для работы с указателями, чтобы они автоматически удалялись, типа статичных объектов. Мне, лично, он тоже не очень нравится - я написал свой класс - потому что ахеренно нужно. И многие виновски хэндлы через него пользую.
Добавлено @ 15:00 А чем тебе ЦРТ не понравилось? |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Все для своих целей в WinAPI следует пользоваться тем, что есть в Win32, а в консоле STL и подобные -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
С ума сошёл? STL - никаким местом не связана с консолями и винапи. Так же как остальные стандартные библиотеки. Это всё !!!СТАНДАРТНЫЕ!!!! библиотеки С++, которые, за не которыми исключениями, будут работать ГДЕ-УГОДНО. И при разработки программ хорошим стилем считается пользоваться именно ими Добавлено @ 15:21 Ты же пользуешься new и delete а это тоже из ЦРТ |
|||
|
||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Олег М
ну, без нужды функции CRT лучше не пользовать. особенно вызывают сомнения функции типа setjump или beginthreadex... Уж лучше по простому - CreateThread, goto или return. про STL - стандартная-то она стандартная, но приходится таскать за собой лишнюю dll на 400 килов, что элегантности проге не прибавляет (msvcp60.dll). И код с ее применением становится ужасно читаем. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
А разве я говорил, что связана? И то что мною здесь было написано относится исключительно к MS VC++. В STL сплошь и рядом юзаются new и delete => STL для MS VC++ напрямую завзязана с CRT. Тот факт, что их пользую я и говорю, что пытаюсь от этого уйти, тоже правда, а использование этих операторов не более чем пережиток внутри моих программ для Win32, также как и многие из нас не считая себя язычниками празднуют масленицу... ![]() -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Класс !!!. В таком случае можно смело заявлять, что и весь С++ - пережиток. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Олег М |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
setjump - базара нет. Ей вообще лучше нигде не пользоваться. А beginthreadex сделана специально для виндов. В ней до кучи инициализируется многопотоковое ЦРТ. Так что если используются стандартные библиотеки, то настоятельно рекомендуется пользоваться ей вместо CreateThread.
Во первых операторы new и delete можно переписать как тебе угодно и будут юзаться именно они. Во вторых, дурью не майся, напиши свой класс типа auto_ptr, если он тебе не нравится (я так и сделал). Это тебе ОЧЕНЬ облегчит жизнь в ахеренных количествах ситуаций. Я бы тебе свой прислал - да под рукой сейчас нет, разве через недельку, если напомнишь.
Что-то раньше не слишком-то эта ДЛЛка мешала (я об ней вообще не знал).
Дык пиши так, чтобы он был не ужасно читаем. Что тебе мешает? |
||||||||
|
|||||||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
STL - не элегантна и плохо читаема? На мой вгляд - это одна из самых элегантых библиотек, придающая коду лаконичность и читабельность. И непонятно, зачем для STL потребовалась библиотека на 400 кило, по-скольку вся библиотека - шаблоны в хидерах. Хотя здесь утверждать не берусь. Я VC не дружу, а Билли еще и не так может -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Дай пять! ![]() |
|||
|
||||
AndyY |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Vyacheslav,
Олег М ![]() мое мнение - что stl - это шутка, которую все восприняли всерьез ![]() ну о какой читаемости идет речь
(пример из фака по STL от mr.DUDA). Крайне сомнительная эленантность присутствует в выражении list< MyStruct>::iterator:). А уж i++ - просто вредно, неокрепшие умы могут подумать что структуры лежат в памяти линейно. Также неуклюжа конструкуия (*i).A - куда естественней i-> К примеру - как написал бы я:
что делать, когда требуется отдать итератор в другой модуль, который не имеет доступа к stl классам, а может быть вовсе написан на дельфи - также не ясно. Добавлено @ 12:52 в общем, жду примеров использования библиотеки, которые делают код более читаемым, лаконичным и элегантным. |
||||
|
|||||
Олег М |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Неокрепшие умы вообще много чего могут подумать. И что писать библиотеки в расчёте на них. Списибо. Сталкивался.
Ну это к mr.Dude. Откуда я знаю - нафига он так написал?
Это пример хорошего или плохого стиля?
Не отдавать! Согласен, в СТЛ есть кой-какие заморочки - но скорее всего я в них ещё просто не разобрался. |
||||||||
|
|||||||||
srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
О том, как отвязаться от CRT и стоит ли это делать, можно почитать здесь
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Да что мы на это несчастное ЦРТ набросились? Проблема-то совсем другом. Royan просто путается в указателях.
А свои-то классы ты хоть используешь? Или только МФЦ, АТЛ и ВинАПИ? Добавлено @ 13:54 В АТЛ есть ещё CAutoPtr. Тоже самое, что auto_ptr, но не ЦРТ!!! |
|||
|
||||
Vyacheslav |
|
||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Очень надеюсь, что "неокрепшие умы" прежде всего обратят на тип переменной, по отношению которой применен оператор ++. В противном случае, пускай отправляются учить С++, иначе и без STL можно дров наломать. Странно. Это понятно
А это нет ?
Ваш пример более неудачен Замену puch_back (втолкнуть сзади) на add_tail (вставить в хвост) мы пропускаем Но вот это
lpos - имеет тип long и следовательно это у Вас обычный индекс. Но тогда уж следовало написать проще и заодно задействовать перегрузку оператора []
А вот здесь вы совершенно правы. А потому куда бы лучше смотрелось
Не ясно, зачем отдавть итератор. Итератор - это лишь способ доступа к элементам контейнера. Нужно отдавать сам элемент. -------------------- С уважением, Вячеслав Ермолаев |
||||||||||||||||
|
|||||||||||||||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Vyacheslav
for(int i = 0; i <end;i++) это, конечно, ясно всем, тут с вами согласен. for(list< MyStruct>::iterator i = thelist.begin(); i != thelist.end(); i++) это - не понятно. оно прикидывается индексом, но таковым не является. lpos - имеет тип long и следовательно это у Вас обычный индекс. Но тогда уж следовало написать проще и заодно задействовать перегрузку оператора [] lpos - не обычный индекс, а ключ доступа (грубо говоря, указатель на некоторую структуру в списке, но по большому счету пользователю классов это по барабану). аналог - POSITION в mfc. перекрывать operator[] - смысла нет, зачем? синтаксис get c возвращением указателя значительно очевидней. отдавать итератор - нужно. Например, некая dll экспортит следующий набор функций:
что отдавать в качестве, если список реализован через STL? Естественно, что-то типа итератора (не сам объект, а ключ доступа к нему). А как? Да и вовсе маскировать доступ к списку под доступ к массиву - не естественно. All mr.Duda просьба не обижать, я его упомянул только как автора кода (типа его copyright) |
|||
|
||||
Олег М |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
С какой радости оно прикидывается индексом? Это итератор, он им и прикидывается.
Вот в этом-то и беда. Я так и не смог добится как из вектора получить указатель на массив. Наверное неглубоко копал?
А зачем ты приводишь тогда такие примеры? Повторюсь, что мы ушли в сторону. |
||||||
|
|||||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Ну вы народ и развели флад в топике ...
![]()
Именно разрабатывая свою библиотеку классов я и сталкиваюсь с большинством вопрсов, о которых иногда спрашиваю Вас - (участников форума). Мне интересен такой вопрос - в каких случаях возинкает упомянутая в этом а также в этом: http://forum.vingrad.ru/index.php?showtopic=25717 топике ошибка, (кроме уже описанных) -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А что за ошибка-то? Ты её хоть выловил? |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
И все таки. Увидев эту запись, программист владеющий С++ в границах его стандарта (выделено мной) , сразу поймет, что здесь имелось ввиду
При этом в пределах поставленной задачи, здесь нет ни строчки лишнего кода. Следовательно лаконично и прозрачно для понимания на уровне знания стандарта. При этом не возникают вопросы типа : а что имелось ввиду под long lpos?, на которые дают ответы : Это аналог - POSITION в mfc. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Vyacheslav
да, от +, -, > и <, рябит в глазах ![]() если вы называете это читаемым кодом - нам обсуждать больше нечего. мы просто живем на разных планетах. |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А Вы считаете это нечитаемым кодом? Тогда действительно нечего обсуждать раз операция вывода в поток для у Вас вызыает затруднения, или Вам трудно понять приоритеты операций?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Vyacheslav, AndyY прав. Это не код. Это понты. Лень ставить скобки? |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Это не понты. Скобки нужны для переопределения приоритетов. Если приоритеты ясны, так зачем скобки. Для "неокрепших умов" ? Нет, уж спасибо.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
AndyY |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Vyacheslav
скобки нужны для экономии денег на этапе багфикса и модификации существующего кода. ![]() чтобы понять ваш код, мне понадобилось вникать примерно 3 секунды. При фиксе баг, когда в голове уже достаточно _важной_ информации, это может быть критичным. пример из жизни - все, конечно, знают алфавит и хорошо читают, но единицы могут читать текст написаный справа налево, и воспринимать его также, как нормальный. |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
В общем замнем эту тему. Андрей, я прочел Ваш "Куда приводит GOTO" и понял, что мы действительно живем на разных планетах.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
2Vyacheslav
Нет не выловил. Это что-то типа выполнения макроса ASSERT() т.е. ошибка происходит в run-time. Фрагмент кода, который "продуцирует" это сообщение после применения оператора delete, приведен здесь: http://forum.vingrad.ru/index.php?showtopic=25717 в асмом первом сообщении. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |