Ошибки, баги, вопросы - страница 1892

 
fxsaber:
Еще такой вопрос
Работа протектора.
 
Renat Fatkhullin:
Работа протектора.
если шутка то смешно )) а если нет, то объясните пожалуйста что такое протектор в программировании
 
Konstantin:
объясните пожалуйста что такое протектор в программировании
та штука из-за которой декомпиляторы пропали
 
Renat Fatkhullin:

Да, вот пример, демонстрирующий ваш вопрос:

и вывод:

Сначала проверяем неразрешенный кастинг снизу вверх и получаем NULL. Все верно.

Потом создаем объект CLASS2, присваиваем ссылку на него родительскому классу (тут важно понять, что в динамике среда знает, что исконный тип объекта CLASS2 - это хранится в его метаинформации). Далее (как раз ваш вопрос) динамически кастим (с проверкой права преобразования на основе метаинформации исходного объекта) из ссылки CLASS1 в CLASS2.

Проверяем результат кастинга и прописываем в переменную i = 1. В финале выводим значение i, обращаясь к исходно созданному объекту.

Все работает верно и по спецификации (включая dynamic_cast спеку самого C++).

Спасибо за разъяснение, теперь по приведению типов в MQL вроде понятно )) Но не понятно тогда зачем создан dynamic_cast, если снизу вверх мы не можем приводить в любом случае, а сверху вниз мы можем обойтись и без dynamic_cast? Может есть какие тонкости тут и я их не понял?
 
Konstantin:
Спасибо за разъяснение, теперь по приведению типов в MQL вроде понятно )) Но не понятно тогда зачем создан dynamic_cast, если снизу вверх мы не можем приводить в любом случае, а сверху вниз мы можем обойтись и без dynamic_cast? Может есть какие тонкости тут и я их не понял?

Перечитайте код и мое объяснение еще раз, пожалуйста.

В нем же продемонстрировано, как динамик каст может безопасно поднять кастинг снизу вверх на основе метаинформации исходно созданного объекта. Если объект был создан из потомка, потом преобразован в ссылку родительского класса, то на основе метаинформации(исходный объект - это реально потомок) можно безопасно преобразовать эту ссылку в потомка.

Обычно используется, когда объекты разнообразных потомков складываются в массив/список ссылок на родительский класс, а потом извлекаются и безопасно приводятся в того или иного потомка. Если приведение дало NULL, значит объект не запршенного потомка и его не надо обрабатывать.

 
Renat Fatkhullin:

Перечитайте код и мое объяснение еще раз, пожалуйста.

В нем же продемонстрировано, как динамик каст может безопасно поднять кастинг снизу вверх на основе метаинформации исходно созданного объекта. Если объект был создан из потомка, потом преобразован в ссылку родительского класса, то на основе метаинформации(исходный объект - это реально потомок) можно безопасно преобразовать эту ссылку в потомка.

Обычно используется, когда объекты разнообразных потомков складываются в массив/список ссылок на родительский класс, а потом извлекаются и безопасно приводятся в того или иного потомка. Если приведение дало NULL, значит объект не запршенного потомка и его не надо обрабатывать.

код я прочитал, но разве это:

CLASS2 *my_ptr2=dynamic_cast<CLASS2 *>(my_ptr);

не аналогично этому:

CLASS2 *my_ptr2=(CLASS2*)my_ptr;

я саму тонкость использования dynamic_cast не могу уловить, за исключением, что при выполнении кода используя dynamic_cast мы не получим ошибку т.к. dynamic_cast в случае ошибки возвращает NULL

 
Konstantin:

код я прочитал, но разве это:

не аналогично этому:

я саму тонкость использования dynamic_cast не могу уловить, за исключением, что при выполнении кода используя dynamic_cast мы не получим ошибку т.к. dynamic_cast в случае ошибки возвращает NULL

Рекомендую почитать спецификации dymanic_cast от C++ в гугле.

Это же банальщина.

 
При раздаче ресурсов ПК в клауд происходит сбой при запуске игры - игра "Call of Duty: Black Ops III" вылетает - был задействован 1 агент. Приоритет у агента минимальный стоял - памяти потреблял 3,5 гигабайта из 16 - в общем проблем не должно было быть. При не активных агентах игра играла нормально. Вообще проводиться тестирование на совместимость агентов с другими программами?
 
-Aleks-:
При раздаче ресурсов ПК в клауд происходит сбой при запуске игры - игра "Call of Duty: Black Ops III" вылетает - был задействован 1 агент. Приоритет у агента минимальный стоял - памяти потреблял 3,5 гигабайта из 16 - в общем проблем не должно было быть. При не активных агентах игра играла нормально. Вообще проводиться тестирование на совместимость агентов с другими программами?

По чему-то сразу пришла идея, что возможно бага в игрушке и связанная она с особенностями работы на 64 битным машинах, когда программа загружена в адресное пространство > 4 Гб
 
Sergey Dzyublik:

По чему-то сразу пришла идея, что возможно бага в игрушке и связанная она с особенностями работы на 64 битным машинах, когда программа загружена в адресное пространство > 4 Гб

Т.е. для проверки этой гипотезы нужно забить ОЗУ более чем на 4 гигабайта и запустить игру - попробую, как сын наиграется.