Все, что вы хотели знать о программизме, но боялись спросить.
vg
Маньяк
Сообщения: 2803 Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага
Сообщение
vg » 01 сен 2005, 09:24
Ответ - потому, что у MS иногда работают такие программисты и советчики.
http://msdn.microsoft.com/msdnmag/issues/0400/c/
...
Stylistically, I prefer assignment in the body because there's more room for formatting and comments, and you can write things like
x=y=z=0;
or
memset(this,0,sizeof(this));
Note that the second snippet is decidedly non-object-oriented...
см. в контексте.
sz
Маньяк
Сообщения: 1266 Зарегистрирован: 17 фев 2003, 19:34
Сообщение
sz » 02 сен 2005, 13:47
И что не нравится?
Прочел. Никаких откровенных глупостей не обнаружил.
Ну разве вот тут немного коряво выразился:
memset(this,0,sizeof(this));
Note that the second snippet is decidedly non-object-oriented...
Но мысль-то понятна. Что если у тебя есть виртуальные функции, то ты этим memset vptr затрешь нафиг.
vg
Маньяк
Сообщения: 2803 Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага
Сообщение
vg » 02 сен 2005, 13:58
Старина Зотин писал(а): И что не нравится?
Прочел. Никаких откровенных глупостей не обнаружил.
Ну разве вот тут немного коряво выразился:
memset(this,0,sizeof(this));
Note that the second snippet is decidedly non-object-oriented...
Но мысль-то понятна. Что если у тебя есть виртуальные функции, то ты этим memset vptr затрешь нафиг.
В этом-то и дело... И он об этом не говорит, а скорее всего и не знает.
Второе (ты не заметил), что если класс дерайвед, то в рантайме появляется ещё одно скрытое от программера поле (кроме ccылки на vtbl) для ссылки на базовый класс. С ним будет тоже самое, что и с виртуальными функциями. Краш двойной.
sz
Маньяк
Сообщения: 1266 Зарегистрирован: 17 фев 2003, 19:34
Сообщение
sz » 02 сен 2005, 14:23
> В этом-то и дело... И он об этом не говорит, а скорее всего и не знает.
С чего это ты решил, что он этого не знает?
> Второе (ты не заметил), что если класс дерайвед, то в рантайме
> появляется ещё одно скрытое от программера поле
Не всегда и не обязательно.
От реализации компилятора зависит.
vg
Маньяк
Сообщения: 2803 Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага
Сообщение
vg » 02 сен 2005, 20:42
>>С чего это ты решил, что он этого не знает?
Это я просто ... у меня сегодня ворчливость повышенная была.
Зря, конечно, я выразился.
Yury
The L'ony
Сообщения: 26202 Зарегистрирован: 22 янв 2004, 13:48
Откуда: Мирный -> Vancouver
Контактная информация:
Сообщение
Yury » 02 сен 2005, 23:44
< почикано самоцензурой
>
ajkj3em
Маньяк
Сообщения: 2063 Зарегистрирован: 12 ноя 2006, 06:53
Сообщение
ajkj3em » 03 сен 2005, 00:07
Старина Зотин писал(а): Что если у тебя есть виртуальные функции, то ты этим memset vptr затрешь нафиг.
Ну на самом деле ТАКИМ memset'ом ты ничего не затрешь. если бы sizeof() был от *this, то тогда еще туда-сюда ..
vg
Маньяк
Сообщения: 2803 Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага
Сообщение
vg » 03 сен 2005, 14:06
poneyhot писал(а): Старина Зотин писал(а): Что если у тебя есть виртуальные функции, то ты этим memset vptr затрешь нафиг.
Ну на самом деле ТАКИМ memset'ом ты ничего не затрешь. если бы sizeof() был от *this, то тогда еще туда-сюда ..
Кстати...
Это ещё в большей степени прикалывает в отношении внимательности деятелей от MS
Уже который раз у них, в статьях MSDN, "очепятки"