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

Поиск:

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


666
**


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

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



Цитата(UnrealMan @ 2.4.2006, 11:48 Найти цитируемый пост)
Да и к быстродействию самих по себе new/delete я никаких претензий не имею – собс-но, если я чего не путаю, они вызывают те же malloc и free, а потому по скорости работают одинаково.

На практике все же new и delete работают насколько медленнее. Можно для проверки написать тест, но в любом случае эта разница будет совсем небольшая. Здесь все зависит от компилятора.


Цитата(UnrealMan @ 2.4.2006, 11:48 Найти цитируемый пост)
Однако ж я не вижу причин полного отказа от malloc.

А я не вижу причин его использования. Если конечно мы пишем на С++, а не на С.

Imho, это разговор в никуда - как всегда договоримся, что malloc рулит (что надо еще доказать), но только в 0,0001% случаях, а в остальном использование malloc'а - пережиток времен С. В итоге и те и другие будут правы, а кто выделял память malloc'ом так и будут это делать. Пора тему закрывать.


Цитата(UnrealMan @ 2.4.2006, 11:48 Найти цитируемый пост)
А как ты в builder'е пробовал-то вызывать конструктор? Так:
pointer->Class() или так:
pointer->Class::Class() ?

Да и так и эдак - Builder не знает метода Class().
В VC6 второй вызов работает как надо, можно даже не через указатель а напрямую.
Но все это imho нужно не более, чем какой-нибудь const_cast. Кто-нить им хоть раз пользовался?
PM MAIL   Вверх
Daevaorn
Дата 2.4.2006, 19:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(baronp @ 2.4.2006, 16:52 Найти цитируемый пост)
Цитата(UnrealMan @ 2.4.2006, 11:48 )
А как ты в builder'е пробовал-то вызывать конструктор? Так:
pointer->Class() или так:
pointer->Class::Class() ?


Да и так и эдак - Builder не знает метода Class().
В VC6 второй вызов работает как надо, можно даже не через указатель а напрямую.
Но все это imho нужно не более, чем какой-нибудь const_cast. Кто-нить им хоть раз пользовался?

Ну вы блин даете. Кто же так конструктор класса вызывает, а? Где это так написано?
Код

class Foo
{
public:
   Foo( int );
};
Foo* p = (Foo*)malloc( sizeof( Foo ) );
new(p) Foo(777);

Если vc компилит это ещё не значит что правильно. smile
PM MAIL WWW   Вверх
UnrealMan
Дата 3.4.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 
Цитата(baronp @ 2.4.2006, 15:52)
На практике все же new и delete работают насколько медленнее. Можно для проверки написать тест, но в любом случае эта разница будет совсем небольшая.

Зато есть большая разница в скорости (десятки раз) выделения разных объёмов памяти (так сказать, камешек в огород std::‎). Причём вся эта разница красуется на интервале малых объёмов (где-то до 1кБ).

Цитата(Daevaorn @ 2.4.2006, 19:55)
Ну вы блин даете. Кто же так конструктор класса вызывает, а? Где это так написано?

:-‎) Дык, эт я методом тыка нашёл сей способ :-‎) Впрочем, я ожидал, что он может оказаться непереносимым.

Кстати, как этому void *operator new(size_t, void *) соответствующий delete прописать? (а то мой компилятор ругается, а я уже не помню, как это дело улаживается)  

Это сообщение отредактировал(а) UnrealMan - 3.6.2006, 09:18
PM MAIL   Вверх
Daevaorn
Дата 3.4.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(UnrealMan @ 3.4.2006, 11:56 Найти цитируемый пост)
Кстати, как этому void *operator new(size_t, void *) соответствующий delete прописать?

А он не нуженsmile
Код

class Foo
{
public:
   Foo( int );
};
Foo* p = (Foo*)malloc( sizeof( Foo ) );
new(p) Foo(777);
//...
p->~Foo();
free( p );

PM MAIL WWW   Вверх
UnrealMan
Дата 4.4.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Daevaorn @ 3.4.2006, 18:47)
А он не нужен

Да вроде как желателен:

Код
void *operator new(size_t size, void *p)
{
    return p;
}

struct Struct
{
    Struct() {}
    ~Struct() {}
};

void AllocStruct()
{
    Struct* p = (Struct *)malloc(sizeof(Struct));
    new(p) Struct();
    //...
    p->~Struct();
    free( p );
}

MSVC++6.0: warning C4291: 'void *__cdecl operator new(unsigned int,void *)' : no matching operator delete found; memory will not be freed if initialization throws an exception
PM MAIL   Вверх
Earnest
Дата 4.4.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 53
Всего: 183



Для каждой формы new (т.е. набора дополнительных аргументов) должна быть соответствующая форма delete (c тем же набором дополнительных аргументов). Для того редкого случая, когда исключение будет возбуждено сразу после благополучного выделения памяти (т.е. в конструкторе). Что, собственно, и написано в предупреждении.
Странно, что компилятор не предоставляет стандартный размещающий delete (тогда как размещающий new есть). Возможно, это "особенности" VC 6. Но теоретически никто не мешает написать размещающий delete (он просто ничего не делает). Или просто забить на предупреждение (отклбючив его, чтобы не травмировать психику). smile


--------------------
...
PM   Вверх
ManiaK
Дата 10.4.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Что-то какой-то жёсткий флуд пошёл, а ведь так забавно всё начиналось... smile

Ignat, я, видимо, в этих вопросах избалован больше smile Такой долбанутости как смвыше не встречал (недавно во всяком случае). Поэтому приходится обращать внимание на такое (надо ж на что-то ругаться):

Код

int func(int a, int b) { a = 3; // Типа место экономим :-)
    b =
          5;// А здесь вообще хз...

return 0;// Начальный отступ - самое частое, что встречаю...
}


Цитата(chipset @ 18.3.2006, 07:09 Найти цитируемый пост)
Переопределение оператора new/delete -- руки отрывать.

Я бы поправил - глобальное переопределение. Переопределение этих операторов в каком-либо классе для меня даже приятно smile До определённой поры, конечно.

Цитата(Ignat @ 18.3.2006, 12:38 Найти цитируемый пост)
Фунция, на которой я споткнулся в п.4 принимает 13 параметров.

А вот это - да. Плохо, значит, продумано, раз такие функции приходится создавать.

PM MAIL WWW   Вверх
UnrealMan
Дата 11.4.2006, 14:42 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ManiaK @ 10.4.2006, 13:07)
Цитата(Ignat @  18.3.2006,  12:38 Найти цитируемый пост)
Фунция, на которой я споткнулся в п.4 принимает 13 параметров.

А вот это - да. Плохо, значит, продумано, раз такие функции приходится создавать.

Ага, CreateWindowEx в топку: она юзает 12 параметров :-)

Цитата(Earnest @ 4.4.2006, 18:17)
Для каждой формы new (т.е. набора дополнительных аргументов) должна быть соответствующая форма delete (c тем же набором дополнительных аргументов).

Вопрос был в том, как её правильно прописать (чтоб предупреждение убралось).


Это сообщение отредактировал(а) UnrealMan - 11.4.2006, 14:49
PM MAIL   Вверх
Ignat
Дата 11.4.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(UnrealMan @ 11.4.2006, 15:42 Найти цитируемый пост)
Ага, CteateWindowEx в топку: она юзает 12 параметров

Ага... Именно в топку.
Значительная часть виндового апи была унаследована от 16-битных приложений и оставлена для совместимости. Правда, вышеупомяннутая функция к ним не относится. Но почему передача параметров не была организована структурой - не понятно.



--------------------
Теперь при чем :P
PM   Вверх
Hose
Дата 11.4.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ох задело не удержался.

На мой взгляд людям, которые без супер-пупер везких причин используют такие пережитки прошлого, как malloc(), а уж тем более явно вызывают конструктор класса, необходимо как можно скорее прижечь раскаленной качергой то место, которое у нех почему-то чешется.
Я считаю, что если ты один делаешь программу для себя, то можешь хоть всю ее из макросов сделать в одном .cpp файле, не написав ни одного коментария.
Но если ты пишешь программу не один, если ее объем достаточно большой, если твой код в будущем кому-то придется использовать, так буть добр действуй по общепринятым правилам.

А теперь по теме. Лично меня больше всего бесит в чужом коде это псевдо крутые программерские фишки типа макросов или жуткого сокращения кода.

P.S. для общего развития - чем плох switch на 10 вариантов?
PM MAIL   Вверх
DeadSoul
Дата 11.4.2006, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Hose @ 11.4.2006, 15:36 Найти цитируемый пост)
P.S. для общего развития - чем плох switch на 10 вариантов?

Смотря в какой ситуации он используется.smile


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

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


Эксперт
****


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

Репутация: 53
Всего: 183



Цитата(UnrealMan @ 11.4.2006, 15:42 Найти цитируемый пост)
Цитата(Earnest @ 4.4.2006, 18:17)
Для каждой формы new (т.е. набора дополнительных аргументов) должна быть соответствующая форма delete (c тем же набором дополнительных аргументов).

Вопрос был в том, как её правильно прописать (чтоб предупреждение убралось).

А что не понятно? Форма записи - так сказано - такие же аргуметны, как у new, только вместо первого size_t (у new) должен быть void* (удаляемый указатель). Внутри (в твоем случае) может ничего не делать. А просто для "убрать предупреждение" достаточно #pragma - т.к. (в твоем случае) никакой утечки памяти произойти не может...
Добавлено @ 12:09
Цитата(Hose @ 11.4.2006, 16:36 Найти цитируемый пост)
P.S. для общего развития - чем плох switch на 10 вариантов?

В первую очередь, плохо-читабельность и плохо-сопровождаемость.
Даже если на каждый case будет просто вызов функции, этот switch уже плохо-обозрим. И почему бы его сразу не заменить на явную таблицу функций?



--------------------
...
PM   Вверх
takedo
Дата 13.4.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

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

Вот и я не смог удеражться smile от высказываний.
Ignat, - тебе просто не повезло, а что касается 14тыс строк - а так ли это много? Это всего лишь 280 страниц в стреднем. И обижаться на программиста нет смысла, так как сейчас действительно программистов используют "в темную", ставя не реальные сроки и не раскрывая того, что требуется. Вообще-то говоря путь есть, он прописан все в тех же ГОСТах, а именно, надо сформировать пакет следующих документов(примерный пакет):
1) технические требования
2) провести дополнительные исследования по результатам которых сформировать техническое задание
3) по техническому заданию сформировать план - график работ

И проблем не будет! Но! Попробуй объясни заказчику, что именно так и только так он будет знать конкретные сроки(хотя они сразу же и возрастут, так как по тех заданию можно составить реалистичный, а не оптимистичный план).
А тот программист в чём то прав. Сейчас его нет и без него программа не получает дальнейшего правильного развития. Я так понимаю, что на его коде основана база проекта, а вот на эту базу ты делаешь "довески". и деньги сейчас получаешь именно ты smile . А тот кто делал базу отдыхает. Если спросишь его доволен ли он работой у твоих работодателей, что получишь в ответ? Да и вообще он может специально сидел пару недель и вычищал все комментарии smile
Я думаю, что вообще в наше время просто необходимо иметь программу, которая не только вычищат комментарии, но и переименовывает функции, например CreateBiilGates(int sex, int nationalnost) в Rl92384jk12324(int uioew89342kj,int sdf83sdf2087). Кстати, кто нибудь делал такую? smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Ignat
Дата 13.4.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Цитата(takedo @ 13.4.2006, 13:39 Найти цитируемый пост)
Кстати, кто нибудь делал такую?

Погугли на предмет обфускаторов. Много можно найти.


--------------------
Теперь при чем :P
PM   Вверх
Earnest
Дата 13.4.2006, 15:30 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 53
Всего: 183



Цитата(takedo @ 13.4.2006, 13:39 Найти цитируемый пост)
Я думаю, что вообще в наше время просто необходимо иметь программу, которая не только вычищат комментарии, но и переименовывает функции, например CreateBiilGates(int sex, int nationalnost) в Rl92384jk12324(int uioew89342kj,int sdf83sdf2087).

Вообще-то это прямой саботаж и обман работодателя. Сданная работа - это не только exe (возможно с документацией), но и приличный код. Уж во всяком случае без преднамеренной порчи. И не надо оправдывать эту пакость тем, что тебе мало платят - ищи, в конце концов, другую работу. Любая халтура - она тебя прежде всего портит.



--------------------
...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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