Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как не надо писать код 
:(
    Опции темы
bilbobagginz
Дата 21.3.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



насчет всего того что код предыдущего кодера иногда писан через одно место:
вопрос какая задача стояла у программиста предыдущего кодa.
Oбычно интересный проект - пайлот, когда заказчик еще сам не знает чего надо досконально,
и описывает задачу в процессе реализации. также возможны подводные камни которые без опыта обнаружатся тоже в процессе реализации. можно не взять такой заказ, а можно взять.
когда берешь, имеет место быть шанс плохого дезайна.

есть конечно тривиальные задачи, которые не нужно "разрабатывать" - взял шаблон и шаблонь.
но не всегда.

но ногами писАть, согласен - нехорошо!

Это сообщение отредактировал(а) bilbobagginz - 21.3.2006, 15:03


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
UnrealMan
Дата 30.3.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Ignat @ 18.3.2006, 06:52)
2. Догадайтесь как обстоят дела с выделением памяти? Именно, незабвенный malloc.

А чем собс-но плох malloc? В случае, когда используются нетривиальные объекты (с конструктором, деструктором), и требуется перевыделение памяти с сохранением данных (realloc), использование new и delete – явно не самое удачное решение.
PM MAIL   Вверх
likehood
Дата 30.3.2006, 17:38 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(UnrealMan @ 30.3.2006, 14:26 Найти цитируемый пост)
В случае, когда используются нетривиальные объекты (с конструктором, деструктором), и требуется перевыделение памяти с сохранением данных (realloc), использование new и delete – явно не самое удачное решение.

А как ты собрался вызывать коструктор из маллока? smile

Хотя, конечно, в данном случае new и delete не особо нужны - классов то все равно нет.
PM MAIL   Вверх
DeadSoul
Дата 30.3.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(UnrealMan @ 30.3.2006, 14:26 Найти цитируемый пост)
А чем собс-но плох malloc?

1. (Как сказали выше) Ничего не знает про конструкторы\деструкторы
2. Для malloca нет smart pointer-ов


Цитата(UnrealMan @ 30.3.2006, 14:26 Найти цитируемый пост)
и требуется перевыделение памяти с сохранением данных (realloc), использование new и delete – явно не самое удачное решение

Самое лучшее решен ие в таком случае - std::vector, но никак не realloc


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
UnrealMan
Дата 31.3.2006, 09:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(baronp @ 30.3.2006, 17:38)
А как ты собрался вызывать коструктор из маллока?

Ясное дело, конструктор вызывается отдельно.

Цитата(DeadSoul @ 30.3.2006, 21:57)
Цитата(UnrealMan @ 30.3.2006, 14:26)
А чем собс-но плох malloc?

1. (Как сказали выше) Ничего не знает про конструкторы\деструкторы

И что? Самому сложно добавить их вызов?

Цитата
2. Для malloca нет smart pointer-ов

Не велика потеря. При желании можно написать свои.

Цитата
Самое лучшее решение в таком случае - std::vector, но никак не realloc

Чем же оно самое лучшее? Быcтрей работает что ли (во всех ситуациях)?
PM MAIL   Вверх
likehood
Дата 31.3.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
А как ты собрался вызывать коструктор из маллока?

Ясное дело, конструктор вызывается отдельно.

Что??? Явный вызов конструктора по указателю? Ты на каком языке пишешь?

Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
И что? Самому сложно добавить их вызов?

Да ты что, это же мое любимое занятие - делать работу за компилятора. smile

Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
2. Для malloca нет smart pointer-ов

А причем тут умные указатели? Для них просто перегружают некоторые операции,
но совсем не обязательно перегружать new и delete.


Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
Чем же оно самое лучшее? Быcтрей работает что ли (во всех ситуациях)?

Лучшее - не значит самое быстрое. А то бы все писали на Си и Асме.
PM MAIL   Вверх
UnrealMan
Дата 31.3.2006, 16:27 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(baronp @ 31.3.2006, 10:31)
Что??? Явный вызов конструктора по указателю?

Ну, да. А что тут, собс-но, смущает?

Цитата
Цитата(UnrealMan @ 31.3.2006, 09:13)
И что? Самому сложно добавить их вызов?

Да ты что, это же мое любимое занятие - делать работу за компилятора.

Ну, макросы ещё вроде бы никто не отменял:

Код
#define New(p, size, type) \
{ \
    (p) = (type *)malloc((size)*sizeof(type)); \
    if (p) \
        for (int i=0; i<size; i++) \
            ((p)+i)->type::type(); \
}

Правда, чтобы эта штуковина заработала внутри шаблонов, придётся ещё повозиться :-‎)

Цитата
Лучшее - не значит самое быстрое.

В некоторых ситуациях быстрота существенна.

Это сообщение отредактировал(а) UnrealMan - 31.3.2006, 19:00
PM MAIL   Вверх
DeadSoul
Дата 31.3.2006, 23:53 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
Цитата
Самое лучшее решение в таком случае - std::vector, но никак не realloc
Чем же оно самое лучшее? Быcтрей работает что ли (во всех ситуациях)?

Велосепидисты вперед!

Цитата(UnrealMan @ 31.3.2006, 09:13 Найти цитируемый пост)
Цитата
2. Для malloca нет smart pointer-ов
Не велика потеря. При желании можно написать свои.

Еще раз вперед

Цитата(UnrealMan @ 31.3.2006, 16:27 Найти цитируемый пост)
Ну, макросы ещё вроде бы никто не отменял:

А что знают макросы про области видимости и пространства имен?



--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
UnrealMan
Дата 1.4.2006, 10:00 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(DeadSoul @ 31.3.2006, 23:53)
А что знают макросы про области видимости и пространства имен?

То же, что и new :-‎) Ну, и? Это типа повод использовать везде и всюду std::vector?

Я-то, в общем-то, не выдвигаю здесь тезис в духе «malloc рулит, всё остальное голимый отстой», а только спрашиваю, почему само по себе использование malloc (независимо от того, какая задача решается) вызывает этакое презрение.
PM MAIL   Вверх
DeadSoul
Дата 1.4.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(UnrealMan @ 1.4.2006, 10:00 Найти цитируемый пост)
Я-то, в общем-то, не выдвигаю здесь тезис в духе «malloc рулит, всё остальное голимый отстой», а только спрашиваю, почему само по себе использование malloc (независимо от того, какая задача решается) вызывает этакое презрение.

Потому, что для new все уже написано.



--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
UnrealMan
Дата 1.4.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(DeadSoul @ 1.4.2006, 11:26)
Потому, что для new все уже написано.

Потому, что предрассудки всё это :-‎)
PM MAIL   Вверх
DeadSoul
Дата 1.4.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(UnrealMan @ 1.4.2006, 18:02 Найти цитируемый пост)
Цитата(DeadSoul @ 1.4.2006, 11:26)
Потому, что для new все уже написано.
Потому, что предрассудки всё это :-‎)

Это не предрассудки. Это деньги. За последний год я ни разу не написал delete или delete[]. Умные указатели\STL рулят


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
UnrealMan
Дата 2.4.2006, 09:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Примитивно это как-то – выискивать некий самый лучший способ на все случаи жизни. Всё зависит от требований задачи. И вот уж как не надо писать код, так это без учёта этих самых требований, руководствуясь только лишь мыслью «а у меня уже есть самый-самый крутой способ, я буду с превеликим благоговением молиться на него и использовать везде во всех своих программах».
PM MAIL   Вверх
likehood
Дата 2.4.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(UnrealMan @ 2.4.2006, 09:41 Найти цитируемый пост)
Примитивно это как-то – выискивать некий самый лучший способ на все случаи жизни.

Да вот как раз не выискивать лучшие способы примитивно, только не на все случаи жизни, а на большую их часть. Если меня устраивает быстродействие new/delete, то почему я должет отказываться от них? Но в любом случае malloc - не лучшее решение, правильнее будет перегрузить new/delete. В любом случае, для использования malloc должны быть очень веские причины и вряд ли в том г. про которое говорил Ignat они были (кроме плохого знания С++).

P.S. 2UnrealMan А на счет явного вызова конструктора - признаю, не знал. Просто никогда не доводилось пользоваться. Решил проверить первым попавшимся под руку компилером - это был 6-й Билдер. Билдер дал по рукам.
После твоего поста:

Цитата(UnrealMan @ 31.3.2006, 16:27 Найти цитируемый пост)
Что??? Явный вызов конструктора по указателю?

Ну, да. А что тут, собс-но, смущает?


попробовал еще раз - на этот раз в VC6. Все прошло в лучшем виде. Правду говорят - Билдер это зло.
PM MAIL   Вверх
UnrealMan
Дата 2.4.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(baronp @ 2.4.2006, 10:19)
Если меня устраивает быстродействие new/delete, то почему я должен отказываться от них?

Отказываться от new и delete я и не призываю. Да и к быстродействию самих по себе new/delete я никаких претензий не имею – собс-но, если я чего не путаю, они вызывают те же malloc и free, а потому по скорости работают одинаково. Хотя есть и функции, которые работают пошустрей, например, AllocMemory и FreeMemory (bhsupp.dll). Однако ж я не вижу причин полного отказа от malloc.

Цитата
Но в любом случае malloc - не лучшее решение, правильнее будет перегрузить new/delete.

Обоснования этой правильности?

Цитата
В любом случае, для использования malloc должны быть очень веские причины

Ну прям очень. Один и тот же результат (в отношении тривиальных объектов без конструкторов), но new всё равно лучше! :-‎) В это надо просто уверовать...

Цитата
попробовал еще раз - на этот раз в VC6. Все прошло в лучшем виде. Правду говорят - Билдер это зло.

А как ты в builder'е пробовал-то вызывать конструктор? Так:
pointer->Class() или так:
pointer->Class::Class() ?

Это сообщение отредактировал(а) UnrealMan - 2.4.2006, 12:08
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.