![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
при вызове realloc(lpmem,newsize), lpmem может поменять базу, в этом случае, если в программе, где-то хранятся указатели на элементы lpmem, их нужно обновить в соответствии с новой базой, иначе при обращении к любому из таких указателей произойдёт наша любимая "Access violation" нотификация(notification) - это шаблонный или виртуальный метод, который вызывается как раз в момет смены базы. Добавлено @ 18:24
В этом случае код просто не откомпилится, пока ты не опишешь в классе X конструктор по-молчанию. Я это к тому, что оператор TYPE [] накладывает свои ограничения на TYPE. В данном случае это очевидно. Не всегда можно описать конструктор по-умолчанию. Если в классе есть поля типа TYPE&, то их надо в любом случае инициировать. Если в .NET можно написать так: *(TYPE*)NULL, то в C++ 6.0 этого сделать нельзя, т.к. компилятор сразу подставляет в такие места что-то вроде mov eax,[ecx], где ecx = 0 (Надеюсь идея ясна) Это сообщение отредактировал(а) GremlinProg - 14.10.2005, 18:42 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Кто виноват если ты не определил конструктор по умолчанию для Х, а потом пишешь:
Если правильно написать оператор[], то и проблем не будет. --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Полагаю, что вместо возвращения null оператор[] должен в случае ошибки бросить исключение, либо вообще не делать никаких проверок. Семантика у него такая - не делать проверок
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| GremlinProg |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
Никто, просто это говорит об ограниченности класса, а если тебе нельзя по другому(см. предыд. ответ) тоты просто пишешь свой класс, вместо встроенного. Вот они, частные случаи. Добавлено @ 18:49
Правильно, тогда чем отличается [] от TYPE Упс, совсем из головы вылетело: меня собственно заинтересовал момент перегрузки TYPE&operator[] и const TYPE&operator[]. Допустим есть функция:
и
Если вызвать её так:
то компилятор сообщит об ошибке "ambrigous access", т.е. непонятно какой оператор вызвать c const TYPE&, или TYPE&. Так вот в случае с operator TYPE*(), этой ошибки никогда не произойдёт, я специально этот момент проверял (в своё время очень нужно было). Это сообщение отредактировал(а) GremlinProg - 14.10.2005, 19:13 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||||
|
|||||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
По-моему ты куда-то не туда загнул.
Сравнивать оператор приведения и извлечения по индексу бессмысленно, это совершенно разные операции. Оператор приведения типа многие гуру (в частности, Майерс) считают опасным и рекомендуют использовать как можно реже. Т.е. только в тех случаях, когда его семантика очевидна. Например, в классах-оболочках. А заменять ими оператор доступа к элементу контейнера - полная ересь. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |