Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка наследования или проблемы ИТЗ? (число прочтений - 15165 )
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Ошибка наследования или проблемы ИТЗ?
26. Февраля 2008 :: 12:05
Печать  
Не знаю в чем конкретно проблема, столкнулся при работе с индексированной таблицей.
Смысл ошибки в том, что при разном порядке объявления базовых классов работа наследуемых методов класса отличается, при этом методы не пересекаются.

Тест прилагается, просьба проверить.
  

TestIT_001.zip ( 14 KB | Загрузки )
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #1 - 26. Февраля 2008 :: 16:34
Печать  
Подтверждаю.
Похоже, что проблемы у ИТЗ. Ибо с ТаблицейЗначений аналогичный код работает.

P.S. Даже если в конструкторе спросить Сам().КоличествоКолонок(), то в сбойном варианте будет 0, хе-хе... Прямо готовый юниттест.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #2 - 26. Февраля 2008 :: 16:44
Печать  
А по-моему, это калечная реализация множественного наследования в 1cpp.
ИТЗ тут точно не при делах.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #3 - 26. Февраля 2008 :: 16:46
Печать  
kms писал(а) 26. Февраля 2008 :: 16:44:
А по-моему, это калечная реализация множественного наследования в 1cpp.

А почему ТаблицаЗначений работает?
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #4 - 26. Февраля 2008 :: 16:51
Печать  
Хотя нет... Похоже Миша прав. Вот такой код тоже ловит ту же проблему:

defcls.prm
Код
Выбрать все
class Базовый = Classes\Базовый.ert
{};

class ТестИТ1 = Classes\ТестИТ.ert : DynaValue, Базовый
{};

class ТестИТ2 = Classes\ТестИТ.ert : Базовый, DynaValue
{};
 



Базовый.ert
пустой

Classes\ТестИТ.ert
Код
Выбрать все
Функция Сам(Конт)
	Возврат Конт;
КонецФункции

Процедура Инит() Экспорт
	Сам(Контекст).ДобавитьСвойство("Ид1", 0);	//Идентификатор партии
	Сам(Контекст).ДобавитьСвойство("Партия", 1); //Объект партия
	Сам(Контекст).ДобавитьСвойство("Вес", 2); 	  // Вес контрольного взвешивания

	Сообщить(Сам(Контекст).КоличествоСвойств());
КонецПроцедуры // Конструктор
 



код клиента
Код
Выбрать все
Процедура Сформировать()
	ИТЗ = СоздатьОбъект("ТестИТ1");
	ИТЗ.Инит();
КонецПроцедуры

Процедура Сформировать2()
	ИТЗ = СоздатьОбъект("ТестИТ2");
	ИТЗ.Инит();
КонецПроцедуры
 



То есть проблема похоже в наследовании от внутренних классов 1С++.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #5 - 26. Февраля 2008 :: 16:56
Печать  
fez писал(а) 26. Февраля 2008 :: 16:46:
kms писал(а) 26. Февраля 2008 :: 16:44:
А по-моему, это калечная реализация множественного наследования в 1cpp.

А почему ТаблицаЗначений работает?

хз, наверное, баг какой-то. Улыбка
Но тут 1cpp методы ИТ даже не дергает.

У меня давно нет доверия к реализации ООП - ну просто ему неоткуда было взяться.
Заниматься поддержкой существующего кода реально влом. Делать новый -  вроде как смысла нет.
Обратная совместимость и т.п.... вилы...

И потом, у нас уже есть альтернативная ООП у Орефкова.
Ну сколько можно разных реализаций одного и того же делать? Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #6 - 26. Февраля 2008 :: 16:57
Печать  
fez писал(а) 26. Февраля 2008 :: 16:51:
То есть проблема похоже в наследовании от внутренних классов 1С++.

Надо все же кому-то разобраться потом будет...
Наверняка, решение можно найти.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #7 - 26. Февраля 2008 :: 17:01
Печать  
kms писал(а) 26. Февраля 2008 :: 16:56:
И потом, у нас уже есть альтернативная ООП у Орефкова.

У Вас есть? Или у Орефкова есть? Или я форум "Репозиторий" давно не смотрел? Улыбка
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #8 - 26. Февраля 2008 :: 17:06
Печать  
fez писал(а) 26. Февраля 2008 :: 17:01:
kms писал(а) 26. Февраля 2008 :: 16:56:
И потом, у нас уже есть альтернативная ООП у Орефкова.

У Вас есть? Или у Орефкова есть? Или я форум "Репозиторий" давно не смотрел? Улыбка

У нас есть пока только у Орефкова Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #9 - 26. Февраля 2008 :: 17:15
Печать  
kms писал(а) 26. Февраля 2008 :: 17:06:
У нас есть пока только у Орефкова Улыбка

Ну да, извини, не вчитался Улыбка
  
Наверх
www  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #10 - 27. Февраля 2008 :: 02:17
Печать  
Баг регить? Хотя я так понимаю надежды что это решится в ближайшем будущем нет Печаль

Зарегистрировал:
http://www.1cpp.ru/bugs/show_bug.cgi?id=3589
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #11 - 27. Февраля 2008 :: 05:15
Печать  
kms писал(а) 26. Февраля 2008 :: 16:56:
У меня давно нет доверия к реализации ООП - ну просто ему неоткуда было взяться.

-1
Как обычно, мало чем подтвержденное высказывание Печаль Печаль

С чего вдруг? Печаль
Столько лет практически все ООП в 1С++ прекрасно работает, никаких существенных замечаний не было или их довольно быстро изменяли.
Постараюсь на этой неделе посмотреть тест и разобраться.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #12 - 27. Февраля 2008 :: 07:52
Печать  
Первый вывод - ошибка очень-очень старая, т.к. повторяется, например, на релизе 2.0.1.1.
В сборке 2.0.3, соответственно, баг также присутствует.

Видимо, народ мало юзает множественное наследование, раз баг до сих пор существовал незамеченным, или мы просто обходили его стороной, не обращая внимания.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #13 - 27. Февраля 2008 :: 07:55
Печать  
artbear писал(а) 27. Февраля 2008 :: 05:15:
kms писал(а) 26. Февраля 2008 :: 16:56:
У меня давно нет доверия к реализации ООП - ну просто ему неоткуда было взяться.

-1
Как обычно, мало чем подтвержденное высказывание Печаль Печаль

Для плохо владеющих логикой и русским языком - объясняю: это высказывание, выражающее личное отношение автора.
Никаких подтверждений здесь не нужно.

Впрочем, здесь есть несколько веток, где мои претензии к реализации ООП в 1cpp высказаны подробно.
К сожалению, чтобы их понять, нужно обладать хотя бы средней логикой и (как ни странно) некоторыми фундаментальными знаниями.
Так что, боюсь, как обычно, предметно поговорить не получится. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #14 - 27. Февраля 2008 :: 08:17
Печать  
kms писал(а) 27. Февраля 2008 :: 07:55:
artbear писал(а) 27. Февраля 2008 :: 05:15:
kms писал(а) 26. Февраля 2008 :: 16:56:
У меня давно нет доверия к реализации ООП - ну просто ему неоткуда было взяться.

-1
Как обычно, мало чем подтвержденное высказывание Печаль Печаль

Для плохо владеющих логикой и русским языком - объясняю: это высказывание, выражающее личное отношение автора.
Никаких подтверждений здесь не нужно.

Высказывание, ничем не подтвержденное, высказывай где-нибудь в другом месте и о других вещах.
Здесь, на тематическом форуме, ИМХО это звучит совсем не корректно, что, впрочем, типично для тебя.

kms писал(а) 27. Февраля 2008 :: 07:55:
Так что, боюсь, как обычно, предметно поговорить не получится.

Ага, как всегда, уходишь от ответа Печаль

ЗЫ Народ, извините, но не смог сдержаться Печаль
Больше оффтопить в этой ветке не буду.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #15 - 27. Февраля 2008 :: 08:28
Печать  
Причину бага нашел.
Все очень просто оказалось Улыбка, т.е. как я и думал.
Скоро залью.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #16 - 27. Февраля 2008 :: 08:31
Печать  
artbear писал(а) 27. Февраля 2008 :: 07:52:
Видимо, народ мало юзает множественное наследование

Если Палыч нас еще не совсем покинул, то множественное наследование для него будет как красная тряпка Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #17 - 27. Февраля 2008 :: 08:32
Печать  
artbear писал(а) 27. Февраля 2008 :: 05:15:
Постараюсь на этой неделе посмотреть тест и разобраться.

Артур, ты опять в наших рядах? Улыбка
Ну ее эту восьмерку, а...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #18 - 27. Февраля 2008 :: 08:47
Печать  
Arta писал(а) 27. Февраля 2008 :: 08:32:
artbear писал(а) 27. Февраля 2008 :: 05:15:
Постараюсь на этой неделе посмотреть тест и разобраться.

Артур, ты опять в наших рядах? Улыбка
Ну ее эту восьмерку, а...

Да я вроде и не бросал насовсем Улыбка
Просто проектов на 7.7 живых нету Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #19 - 27. Февраля 2008 :: 08:50
Печать  
artbear писал(а) 27. Февраля 2008 :: 08:28:
Причину бага нашел.
Все очень просто оказалось Улыбка, т.е. как я и думал.
Скоро залью.

Ошибка исправлена и залита в репозитарий.
Будет в завтрашней сборке.


ЗЫ вопрос тем, кто на 2.0.3 - нужно ли ее исправлять.
Замена проста - <= заменить на < Улыбка в одном, нужном месте.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #20 - 27. Февраля 2008 :: 09:01
Печать  
artbear писал(а) 27. Февраля 2008 :: 08:17:
Высказывание, ничем не подтвержденное, высказывай где-нибудь в другом месте и о других вещах.

Забавно, когда принципиальный недоучка берется учить других жизни. Улыбка
Впрочем, это распространенное явление в наши дни.

Ты хочешь, чтобы я предметно объяснил тебе, кто ты есть?
Без проблем (все в одной процедуре):
Код
Выбрать все
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
	SGCData* pData = pContextInfo->m_pData;
	bool bNeedDeleteData = !pData->m_Destroy;
	delete pContextInfo;
	if (bNeedDeleteData)
		delete pData;

 


Двойное удаление объекта.

Код
Выбрать все
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
delete [] m_pMyVTable;
 



Человек, который ВЫШИБАЕТ VTBL изо ВСЕХ активных контекстов - НЕ ДОЛЖЕН браться за такие вещи, как TurboBL.
Это не ошибка, это отсутствие понимания того, что ты делаешь.
И если логика отсутствует как класс, никакие тесты здесь не помогут.

С таким уровнем, Артур, я не считаю, что тебе стоит заниматься чем-то, кроме прикладных классов, от которых ничего не зависит.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #21 - 27. Февраля 2008 :: 09:08
Печать  
kms
Я не понимаю цель тоих высказываний. Вроде одно дело делаете, видишь что товарищ что то делает не так, объясни ему. А так ни какой практической пользы от твоих высказываний для проекта нет. Только воду мутишь Печаль
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #22 - 27. Февраля 2008 :: 09:12
Печать  
Nick писал(а) 27. Февраля 2008 :: 09:08:
kms
Я не понимаю цель тоих высказываний. Вроде одно дело делаете, видишь что товарищ что то делает не так, объясни ему. А так ни какой практической пользы от твоих высказываний для проекта нет. Только воду мутишь Печаль

Мы делаем разное дело.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #23 - 27. Февраля 2008 :: 09:14
Печать  
Цитата:
Мы делаем разное дело.


Так может попробовать объединить усилия?
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #24 - 27. Февраля 2008 :: 09:17
Печать  
Nick писал(а) 27. Февраля 2008 :: 09:08:
kms
Я не понимаю цель тоих высказываний. Вроде одно дело делаете, видишь что товарищ что то делает не так, объясни ему. А так ни какой практической пользы от твоих высказываний для проекта нет. Только воду мутишь Печаль

Для того, чтобы понять суть дела, надо понимать, что такое "удаление VTBL для активных объектов".
Ты в состоянии понять эту суть?

Если да, я готов говорить с тобой.
Если нет, то просьба не заниматься пустой болтовней.

P.S.
Из тех, кто может понять эту проблему - я знаю всего троих на этом форуме.
Ни один из этих людей больше в развитии 1cpp участвовать не желает.

Может, так тебе будет понятна цель моих высказываний?
И, может быть так, будет легче отличить добро и зло и определиться "что такое хорошо и что такое плохо"?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #25 - 27. Февраля 2008 :: 09:20
Печать  
Артур, как ни странно, но я тут поддержу Михаила.
Ваш разговор выглядит примерно так.

- Что-то не нравится мне эта машинка
- Чё это вдруг тебе не нравится? Анукаобоснуйка, всем нравится, ни у кого претензий не было, а тебе вдруг не нравится! Срочно чтоб понравилось!
- Ну просто не нравится и все. Не лежит душа.
- Ну вот, как обычно беспредметно съехал с темы, отстойник.
- Сам отстойник.

P.S. Постарайтесь снизить накал перепалки. ОБА постарайтесь. Пожалуйста.
P.P.S. Подсказка. Для этого достаточно перед написанием каждого ответа сделать паузу в пять... нет, лучше в десять минут.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #26 - 27. Февраля 2008 :: 09:26
Печать  
kms писал(а) 27. Февраля 2008 :: 09:01:
Без проблем (все в одной процедуре):
Код
Выбрать все
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
	SGCData* pData = pContextInfo->m_pData;
	bool bNeedDeleteData = !pData->m_Destroy; // п.1
	delete pContextInfo; // п.2
	if (bNeedDeleteData)
		delete pData; // п.3

 


Двойное удаление объекта.

1) Умник, ты хотя бы код более подробно смотрел, а?
Расшифровываю для тебя:
вызов п.2 - это
Код
Выбрать все
				~SGCInfo(){m_pData->Remove();} 


Вызыывает
Код
Выбрать все
		void SGCData::Remove()
		{
			if(m_Destroy)
				delete this;
		}
 


ни о чем тебе не говорит, а?
Или еще более подробно расписать, что означает m_Destroy и bool bNeedDeleteData = !pData->m_Destroy ?

По удалению вирт.таблицы постараюсь вспомнить и сказать более подробно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #27 - 27. Февраля 2008 :: 09:27
Печать  
Ребята, давайте остынем.

Я думаю, не стоит сводить все к эмоциональному шуму.

Я выражаю свою позицию, которая на данный момент не подлежит изменению.
Я прекрасно понимаю, что с профессиональной точки зрения, меня здесь могут понять полтора человека.
Мне этого достаточно.

Остальных прошу не волноваться, бросить луки и копья.
Все будет хорошо. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #28 - 27. Февраля 2008 :: 09:29
Печать  
Цитата:
Может, так тебе будет понятна цель моих высказываний?
И, может быть так, будет легче отличить добро и зло и определиться "что такое хорошо и что такое плохо"?


Я не говорю что этот код правильный, я говорю о том что раз ты знаешь что это неправильно так сделай пост вветке разработка и устрой там ликбез
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #29 - 27. Февраля 2008 :: 09:36
Печать  
Nick писал(а) 27. Февраля 2008 :: 09:29:
Цитата:
Может, так тебе будет понятна цель моих высказываний?
И, может быть так, будет легче отличить добро и зло и определиться "что такое хорошо и что такое плохо"?


Я не говорю что этот код правильный, я говорю о том что раз ты знаешь что это неправильно так сделай пост вветке разработка и устрой там ликбез

Как ты думаешь, почему не осталось никого, кто хотел бы устраивать ликбез по таким случаям в разделе разработка? Подмигивание
Смотри, сейчас договоришься до того, что останешься исключительно с теми, кому этот ликбез как раз так необходим. Смех
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #30 - 27. Февраля 2008 :: 09:38
Печать  
kms писал(а) 27. Февраля 2008 :: 09:27:
Я прекрасно понимаю, что с профессиональной точки зрения, меня здесь могут понять полтора человека.


Нда... Скромно так...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #31 - 27. Февраля 2008 :: 09:41
Печать  
artbear писал(а) 27. Февраля 2008 :: 09:26:
Код
Выбрать все
SGCData* pData = pContextInfo->m_pData;
	bool bNeedDeleteData = !pData->m_Destroy;
	delete pContextInfo;
	if (bNeedDeleteData)
		delete pData;
 



Расшифровываю для тебя:
вызов п.2 - это
Код
Выбрать все
				~SGCInfo(){m_pData->Remove();} 


Вызыывает
Код
Выбрать все
		void SGCData::Remove()
		{
			if(m_Destroy)
				delete this;
		}
 


ни о чем тебе не говорит, а?

И что, при повторном получении SGCData из m_DataMap проблем с получением удаленных данных не будет?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #32 - 27. Февраля 2008 :: 09:42
Печать  
sadovnikov писал(а) 27. Февраля 2008 :: 09:38:
kms писал(а) 27. Февраля 2008 :: 09:27:
Я прекрасно понимаю, что с профессиональной точки зрения, меня здесь могут понять полтора человека.


Нда... Скромно так...

Из тех, кто еще остался здесь, к сожалению. Печаль
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #33 - 27. Февраля 2008 :: 09:46
Печать  
kms писал(а) 27. Февраля 2008 :: 09:01:
Код
Выбрать все
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
delete [] m_pMyVTable;
 



Человек, который ВЫШИБАЕТ VTBL изо ВСЕХ активных контекстов - НЕ ДОЛЖЕН браться за такие вещи, как TurboBL.
Это не ошибка, это отсутствие понимания того, что ты делаешь.
И если логика отсутствует как класс, никакие тесты здесь не помогут.

С таким уровнем, Артур, я не считаю, что тебе стоит заниматься чем-то, кроме прикладных классов, от которых ничего не зависит.

Смотрим и этот пункт
Мой код
Код
Выбрать все
	delete [] m_pMyVTable;
	m_pMyVTable = NULL;

	SGCInfo* pContextInfo = reinterpret_cast<SGCInfo*>(pGroupContext->m_FlagAutoDestroy);

	// TODO возможен лик при выделении виртуальной таблицы
	Boost(pMod, optimize);

// п. 1
 


Далее в CGCBoost::Boost написано
Код
Выбрать все
BOOL CGCBoost::Boost(CBLModule7 *pMod, BOOL optimize)
{
....
	if(!m_pMyVTable)
	{
		//m_pRealVTable=*(DWORD**)pCont;
		m_pRealVTable = addrVTable;
		CGCBoost* pBoost=new CGCBoost;
		DWORD* pMyVTable=*(DWORD**)pBoost;
		delete pBoost;
		m_pMyVTable=new DWORD[64]; // TODO лик ?
		memcpy(m_pMyVTable,m_pRealVTable,256);

		m_pMyVTable[18]=pMyVTable[18];	// GetNProps artbear
		m_pMyVTable[19]=pMyVTable[19];	// FindProp
		m_pMyVTable[20]=pMyVTable[20];	// GetPropName artbear
		m_pMyVTable[21]=pMyVTable[21];	// GetPropVal
		m_pMyVTable[22]=pMyVTable[22];	// SetPropVal
		m_pMyVTable[23]=pMyVTable[23];	// IsPropReadable
		m_pMyVTable[24]=pMyVTable[24];	// IsPropWritable
		m_pMyVTable[25]=pMyVTable[25];	// GetNMethods artbear
		m_pMyVTable[26]=pMyVTable[26];	// FindMethod
		m_pMyVTable[27]=pMyVTable[27];	// GetMethodName artbear
		m_pMyVTable[28]=pMyVTable[28];	// GetNParams
		m_pMyVTable[29]=pMyVTable[29];	// GetParamDefValue
		m_pMyVTable[30]=pMyVTable[30];	// HasRetVal
		m_pMyVTable[31]=pMyVTable[31];	// CallAsProc
		m_pMyVTable[32]=pMyVTable[32];	// CallAsProc
	}

....
}
 


Этот код тебе ни о чем не говорит, а?
Я как раз этот участок кода хорошо проработал, в отличие от тебя, самого умного программиста.
Т.е. этот код выполняется непрерывно, и в до попадания в п.1 подмененная виртуальная таблица для группового контекста просто не нужна, т.к. вызовы виртуальных методов этих контекстов не выполняются.

Если ты не понимаешь логику чьей-то работы, это не говорит о том, что этой логики нет на самом деле.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #34 - 27. Февраля 2008 :: 09:50
Печать  
sadovnikov

Олег, вот если у тебя будет время, не поленись, сверь "Ответ #33" с тем, что происходит на самом деле.
Если ты согласишься, что автор ответа не понимает, о чем говорит, можешь поставить мне пиво.

По желанию, конечно Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #35 - 27. Февраля 2008 :: 09:50
Печать  
Нууу, а еще говорят, что у меня проблемы с толерастией  Очень довольный Разошлись... Да я, по сравнению с вами, наивный белый мохнатый ягненочек ! Очень довольный

PS. Лично на меня ООП всегда производило сильно "неоднозначное" впечатление. Начиная с того, что с документацией как-то не очень - многие вещи только в history можно вытащить. Заканчивая до сих пор вылезающими в разных местах косяками, не смотря на несколько лет допиливания этой системы. Из ООП мне с более-менее реальной пользой удалось прикрутить только инкапсуляцию кода. ИМХО, более перспективно создание шлюза в альтернативные языки, где вам будет и нормальное ООП, и ФП, и АОП и параллельное программирование. Скажите, это гораздо интереснее, чем привинчивать ООП к 1С?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #36 - 27. Февраля 2008 :: 09:53
Печать  
Uzhast

Не, ты погоди Улыбка

Ты на самом деле, последняя надежда раздела "Разработка".
Опять же, Ответ №33 - рекомендую. Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #37 - 27. Февраля 2008 :: 09:53
Печать  
kms писал(а) 27. Февраля 2008 :: 09:50:
sadovnikov

Олег, вот если у тебя будет время, не поленись, сверь "Ответ #33" с тем, что происходит на самом деле.
Если ты согласишься, что автор ответа не понимает, о чем говорит, можешь поставить мне пиво.

По желанию, конечно Улыбка


А зачем? Просто, я считаю, что любой спор должен, как минумум, укладываться в рамки приличия. Оскорб##ть-то друг друга зачем? Причем, не важно, кто перешел к оскорблениям первым...
А хочется полаяться - на это аська есть и личный мордобой  Подмигивание
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #38 - 27. Февраля 2008 :: 09:56
Печать  
+"Ответ #37"
А пивом я и просто так накачать могу Улыбка
Заходите в гости Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #39 - 27. Февраля 2008 :: 10:13
Печать  
sadovnikov

Моя цель - не доказать что-либо участникам форума.
Я просто не хочу как Балда "работать за троих, есть за пятерых".

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

sadovnikov писал(а) 27. Февраля 2008 :: 09:56:
+"Ответ #37"
А пивом я и просто так накачать могу Улыбка
Заходите в гости Улыбка

Ладно, на таких условиях я согласен на все, что угодно.  Очень довольный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #40 - 27. Февраля 2008 :: 10:43
Печать  
kms писал(а) 27. Февраля 2008 :: 09:53:
Опять же, Ответ №33 - рекомендую. Подмигивание

Рискую показаться чайником, но все же приведу нить своих рассуждений.

Итак, в чем отличие объекта с виртуальными функциями от обычного объекта? У объекта с виртуальными функциями первый член данных - это vfptr. vfptr - это адрес блока адресов виртуальных функций (vtable).

Что происходит в коде RefreshGroupContextData? Вызов delete [] m_pMyVTable. Если я правильно понял, это переопределенная таблица адресов виртуальных функций для "похаченных" в TurboBL контекстов. Далее в функции Boost, если таблица адресов была удалена (или еще не была создана), она создается и инициализируется.

Не совсем уверен, как происходит на самом деле, но в худшем случае будет следующее. Если на момент вызова delete [] m_pMyVTable уже существовало несколько контекстов, использующих эту vtable, то после вызова delete эти существующие контексты вылетят в космос. Потому что, сколько объектов, столько и будет существовать vfptr. Т.к. vtable удалена, то все эти vfptr указывают на удаленную память, которая может быть задействована в ближайшем выделении памяти и заполнена совершенно левыми значениями.

Правильно я понял?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #41 - 27. Февраля 2008 :: 10:49
Печать  
Возможно, что я чего-то на самом деле не учел в итоге, но это не дает тебе право высказываться подобным образом.
Ошибки бывают у всех и всегда.
А команда - она и есть команда, чтобы совместно их исправлять.
Все равно вся наша жизнь - это учеба.

Свой код в ТурбоБЛ сегодня еще раз пересмотрю.

ЗЫ например, я пришел в 1С++ после того, как мне надоело наблюдать за постоянными багами, допускаемыми с твоей стороны при разработке, было это пару лет назад.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #42 - 27. Февраля 2008 :: 10:50
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 10:43:
Если на момент вызова delete [] m_pMyVTable уже существовало несколько контекстов, использующих эту vtable, то после вызова delete эти существующие контексты вылетят в космос. Потому что, сколько объектов, столько и будет существовать vfptr. Т.к. vtable удалена, то все эти vfptr указывают на удаленную память, которая может быть задействована в ближайшем выделении памяти и заполнена совершенно левыми значениями.

Правильно я понял?

Точно.

artbear писал(а) 27. Февраля 2008 :: 09:46:
Я как раз этот участок кода хорошо проработал, в отличие от тебя, самого умного программиста.
Т.е. этот код выполняется непрерывно, и в до попадания в п.1 подмененная виртуальная таблица для группового контекста просто не нужна, т.к. вызовы виртуальных методов этих контекстов не выполняются.

Если ты не понимаешь логику чьей-то работы, это не говорит о том, что этой логики нет на самом деле.


Вот так. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #43 - 27. Февраля 2008 :: 10:52
Печать  
artbear писал(а) 27. Февраля 2008 :: 10:49:
А команда - она и есть команда, чтобы совместно их исправлять.

Нет.
У меня другие представления о команде.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #44 - 27. Февраля 2008 :: 10:54
Печать  
Мужики, хватит уже, вы мне плохой пример подаете  Очень довольный
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #45 - 27. Февраля 2008 :: 10:58
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 10:54:
Мужики, хватит уже, вы мне плохой пример подаете  Очень довольный

Держись, брат. Подмигивание
Но помни, от того, удастся ли мне доказать правду, зависит, будешь ли ты работать над проектом или над такими "ошибками".
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #46 - 27. Февраля 2008 :: 11:03
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 10:43:
Итак, в чем отличие объекта с виртуальными функциями от обычного объекта? У объекта с виртуальными функциями первый член данных - это vfptr. vfptr - это адрес блока адресов виртуальных функций (vtable).

Что происходит в коде RefreshGroupContextData? Вызов delete [] m_pMyVTable. Если я правильно понял, это переопределенная таблица адресов виртуальных функций для "похаченных" в TurboBL контекстов. Далее в функции Boost, если таблица адресов была удалена (или еще не была создана), она создается и инициализируется.

Не совсем уверен, как происходит на самом деле, но в худшем случае будет следующее. Если на момент вызова delete [] m_pMyVTable уже существовало несколько контекстов, использующих эту vtable, то после вызова delete эти существующие контексты вылетят в космос. Потому что, сколько объектов, столько и будет существовать vfptr. Т.к. vtable удалена, то все эти vfptr указывают на удаленную память, которая может быть задействована в ближайшем выделении памяти и заполнена совершенно левыми значениями.

Правильно я понял?

Нет, Олег, не совсем правильно.
Ты же сам пишешь, что "vfptr - это адрес блока адресов виртуальных функций". Самое главное здесь то, что это блок адресов.
Т.е. если мы удаляем саму vfptr, сами адреса не удаляются.
Далее в функции Буст мы заново заполняем vfptr этими же адресами.
И в этой схеме нет ничего страшного, если учтены все детали.

Но, вполне может быть, что я как раз и не учел все детали - например, где-то внутри ТурбоБл обращение к методам контекста Печаль

ЗЫ между прочим, я нигде не писал и не говорил, что RefreshGroupContextData уже готовый к использованию метод.
Ни в 1С++, ни в ФормЕкс нет его использования.
Самый главный баг в нем на момент последней моей правки этого метода, т.е. довольно давно - это то, после его применения в некоторых случаях, которых я уже не помню (где-то в тестах есть), дублируются методы - т.е. таблица методов становится больше Печаль
На работу это не влияет вроде бы, но выглядит некрасиво.
Времени разобраться не хватило, так и оставил.

Вот прямая цитата из кода
Цитата:
// обновление данных контекста будет использоваться, например, при
// динамическом добавлении атрибутов на форму
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)

Обратите внимание на будет использоваться

Так что нефиг юзать то, что, возможно, еще не до конца реализовано Улыбка и уж тем более высказываться настолько грубо.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #47 - 27. Февраля 2008 :: 11:07
Печать  
kms писал(а) 27. Февраля 2008 :: 10:52:
artbear писал(а) 27. Февраля 2008 :: 10:49:
А команда - она и есть команда, чтобы совместно их исправлять.

Нет.
У меня другие представления о команде.

Как раз у тебя нет представления работы в команде.
Ты просто не командный игрок 100%
В качестве примера расскажи, в каких командах ты работал и что реализовывал?
Я навскидку - 1С++, ФормЕкс, Фанктест - и это именно командные проекты.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #48 - 27. Февраля 2008 :: 11:11
Печать  
artbear писал(а) 27. Февраля 2008 :: 11:03:
Нет, Олег, не совсем правильно.
Ты же сам пишешь, что "vfptr - это адрес блока адресов виртуальных функций". Самое главное здесь то, что это блок адресов.
Т.е. если мы удаляем саму vfptr, сами адреса не удаляются.
Далее в функции Буст мы заново заполняем vfptr этими же адресами.
И в этой схеме нет ничего страшного, если учтены все детали.

Есть два понятия:
vtable - блок адресов виртуальных функций
vfptr - адрес vtable.

delete удаляет память, где лежит vtable. vfptr для существующих объектов не меняется и указывает, таким образом, на удаленную память. Ведь vfptr для всех существующих объектов не заменяется на новый, так? Когда выделяется память под новую vtable она может как лечь на "старое" место - где раньше лежала наша vtable, так и на совершенно новое. При этом память от старой vtable может быть отдана при каком-нибудь другом выделении памяти. Соответственно адреса, лежащие в vtable будут затерты. Вызов виртуальной функции происходит при помощи vfptr: берем адрес таблицы, по индексу берем адрес функции и вызываем ее по полученному адресу. В результате будет вызов по неизвестному адресу с неизвестным результатом.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #49 - 27. Февраля 2008 :: 11:16
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 11:11:
Есть два понятия:
vtable - блок адресов виртуальных функций
vfptr - адрес vtable.

delete удаляет память, где лежит vtable. vfptr для существующих объектов не меняется и указывает, таким образом, на удаленную память. Ведь vfptr для всех существующих объектов не заменяется на новый, так?

Олег, не так.
Как раз vfptr для существующих объектов и заменяется на адрес новой таблицы Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #50 - 27. Февраля 2008 :: 11:18
Печать  
artbear писал(а) 27. Февраля 2008 :: 11:16:
Олег, не так.
Как раз vfptr для существующих объектов и заменяется на адрес новой таблицы Улыбка

Где заменяется этот vfptr? В каком месте? Я так понимаю, каждый объект имеет свой vfptr. Значит, чтобы заменить vfptr, нужно обойти все эти объекты и в каждом из них исправить vfptr. В каком месте это происходит?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #51 - 27. Февраля 2008 :: 11:19
Печать  
artbear писал(а) 27. Февраля 2008 :: 11:03:
Нет, Олег, не совсем правильно.
Ты же сам пишешь, что "vfptr - это адрес блока адресов виртуальных функций". Самое главное здесь то, что это блок адресов.
Т.е. если мы удаляем саму vfptr, сами адреса не удаляются.
Далее в функции Буст мы заново заполняем vfptr этими же адресами.
И в этой схеме нет ничего страшного, если учтены все детали.

Предложение
"Далее в функции Буст мы заново заполняем vfptr этими же адресами."
читать как
"Далее в функции Boost мы заново заполняем vfptr адресом на новый блок адресов виртуальных функций."

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #52 - 27. Февраля 2008 :: 11:22
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 11:18:
Где заменяется этот vfptr? В каком месте? Я так понимаю, каждый объект имеет свой vfptr. Значит, чтобы заменить vfptr, нужно обойти все эти объекты и в каждом из них исправить vfptr. В каком месте это происходит?

Олег, ты kms не слушай.
Лучше код посмотри Улыбка и сам реши, кто прав, а кто виноват.
TurboBL\gcboost.cpp и h
методы CGCBoost::Boost и CGCBoost::RefreshGroupContextData
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #53 - 27. Февраля 2008 :: 11:25
Печать  
artbear писал(а) 27. Февраля 2008 :: 11:22:
Олег, ты kms не слушай.
Лучше код посмотри Улыбка и сам реши, кто прав, а кто виноват.
TurboBL\gcboost.cpp и h
методы CGCBoost::Boost и CGCBoost::RefreshGroupContextData


Я этот код как раз сейчас и смотрю. Ты путаешь понятия vtable и vfptr. vtable у ряда объектов может быть совершенно одинакова. Потому что у этих объектов vfptr указывает на одинаковую vtable. Ты создаешь новую vtable, но vfptr всех существующих объектов указывает на старую, уже удаленную vtable. vfptr - это атрибут не класса, а конкретного объекта, его нельзя заменить правкой в одном месте. Потому что КАЖДЫЙ объект класса имеет СВОЙ vfptr. В том коде, что ты говоришь, нет обхода всех объектов и замены vfptr.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #54 - 27. Февраля 2008 :: 11:50
Печать  
1. Повторюсь Печаль

ЗЫ между прочим, я нигде не писал и не говорил, что RefreshGroupContextData уже готовый к использованию метод.
Ни в 1С++, ни в ФормЕкс нет его использования.

2. Да, похоже, я все-таки Печаль не до конца продумал эту часть Печаль
А с другой стороны, читаем фразу выше и помним, что были только благие намерения, которые, как обычно, привели не к светлому будущему Улыбка

3. Значит, буду/будем ? искать другой подход к решению проблемы динамического обновления свойств и методов группового контекста.

4. kms с некоторых пор лично я уважать перестал и уже, похоже, никогда не начну уважать. Перестал уважать именно из-за его грубейшего поведения при общении с людьми.

Признаю его как знающего разработчика, но как человек он для меня никто. Считаю, что именно из-за подобных его действий/высказываний из нашего проекта ушло много людей.

Между прочим, он уже не один раз покидал наш проект.
Почему же он возвращается, если в проекте все так плохо, а?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #55 - 27. Февраля 2008 :: 13:35
Печать  
artbear писал(а) 27. Февраля 2008 :: 11:50:
Между прочим, он уже не один раз покидал наш проект.
Почему же он возвращается, если в проекте все так плохо, а?

Думаю тут не одна причина. Несмотря на то что у Миши много эмоций, он быстро остывает. Кроме того, есть желание "творить", слава богу в v7 такая возможность есть. Есть еще причины, почему люди до сих пор держаться проекта.

Давайте не будем раздувать огонь. И так уже обжигает...


P.S. Нет бы делом занимались, ей богу как дети малые Улыбка Тьфу-тьфу на ветку, поехал я пару склонов обкатаю, пока снег совсем не растаял.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #56 - 27. Февраля 2008 :: 14:05
Печать  
artbear

Потеря уважения к кому бы то ни было, к сожалению, не восполнит недостатка подготовки и не добавит ответственности перед собой и другими.
Стремление браться за задачи, которые тебе не по силам, по прежнему будет требовать компенсации со стороны других людей.

С точки зрения DIR (Do-It-Right, такой технодайвинг) нам с тобой нельзя погружаться вместе.

Про командную работу не надо мне рассказывать сказки.
Я знаю, как люди живут и умирают в таких командах. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #57 - 27. Февраля 2008 :: 14:09
Печать  
Опять вода, вода, вода Печаль
Все, умолкаю.
Иначе, правда, не очень красиво получается - ветку испортили Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #58 - 27. Февраля 2008 :: 16:19
Печать  
Если нужна конкретика - пожалуйста.

Я вот до сих пор не могу однозначно определиться с твоей, Артур, ролью в проекте Functest. С одной стороны, ты написал много нужного функционала, а с другой стороны это породило большое количество трудносопровождаемого кода, который требует, да нет, просто кричит о том, что его надо причесать.

В вышеописанном несомненно есть и моя вина. Да нет, исключительно моя вина. Я - ведущий этого проекта, и мне отвечать за все, что там происходит. И наверное мне даже надо сказать тебе спасибо за то, что ты невольно открыл мне глаза на очень многое. Например на то, чем хороши патчи, и чем плохи отправки правленного проекта целиком.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #59 - 28. Февраля 2008 :: 05:19
Печать  
Федор, хотя мне есть что ответить по Фанктесту,
раз я обещал молчать, буду молчать.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #60 - 28. Февраля 2008 :: 08:50
Печать  
Автор, проверь, плиз, баг на сегодняшней ночной сборке.
Если баг не повторяется, в багзилле поставь для бага статус "Исправлен", лады?
ЗЫ тест для бага в юнит-тесты только что залил.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #61 - 28. Февраля 2008 :: 08:58
Печать  
artbear писал(а) 28. Февраля 2008 :: 08:50:
Автор, проверь, плиз, баг на сегодняшней ночной сборке.
Если баг не повторяется, в багзилле поставь для бага статус "Исправлен", лады?
ЗЫ тест для бага в юнит-тесты только что залил.

Проверил, закрыл.
Спасибо за оперативность
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #62 - 28. Февраля 2008 :: 10:16
Печать  
Видимо это не последняя проблема ООП Печаль

Скажите что происходит если базовый класс и класс наследник имеют динамические свойства?
Корректно ли вообще делать такие вещи?
  
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #63 - 28. Февраля 2008 :: 10:23
Печать  
в новую ветку, если не трудно. и поподробнее.
  
Наверх
www  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #64 - 28. Февраля 2008 :: 10:29
Печать  
fez писал(а) 28. Февраля 2008 :: 10:23:
в новую ветку, если не трудно. и поподробнее.

Поподробней пока некогда, это так мысли в слух. Может кто знает как это должно работать
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #65 - 28. Февраля 2008 :: 11:47
Печать  
Nick писал(а) 28. Февраля 2008 :: 10:16:
Видимо это не последняя проблема ООП Печаль

Пока это не установлено, считаем это только предположением Улыбка

Nick писал(а) 28. Февраля 2008 :: 10:16:
Скажите что происходит если базовый класс и класс наследник имеют динамические свойства?
Корректно ли вообще делать такие вещи?

Пока в 1С++ оба этих класса должны самостоятельно реализовывать спец. схему Печаль для нормальной работы.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #66 - 28. Февраля 2008 :: 11:52
Печать  
Цитата:
Пока в 1С++ оба этих класса должны самостоятельно реализовывать спец. схему  для нормальной работы.


Вот вот, по сути говоря это означает что динамический свойства лутше не использовать вообще потому как фиг что корректно унаследуешь от такого класса. Но даже дело не в этом. Попозже тестик напишу
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать