Re[7]: Виртуальный деструктор
От: rg45 СССР  
Дата: 05.03.13 11:57
Оценка:
Здравствуйте, 3m-soft, Вы писали:

3S>Здравствуйте, rg45, Вы писали:


R>>Это все замечательно, но факт остается фактом (из твоего же описания) — динамическая библиотека dynaload.dll содержит свой набор функций-членов класса, вместо того, чтобы использовать экспортируемые.


3S>Она не содержит свой набор функций, все методы она вызывает из mylib.dll (ну я же вижу своими глазами на дебагере, по стеку вызовов, по адресному пространству наконец). Она содержит только обертку вокруг родного деструктора, и чтобы вызывалась именно обертка, а не родной деструктор, подменяется vtable. В дебаг версии я, по крайней мере, понимаю смысл этой обертки. Судя по вызовам, она занимается runtime check. Но в релизной версии runtime check не совместима с оптимизациями, но компилятор все равно делает обертку.


Действительно, создание подобных оберток — это большая свинья со стороны компилятора, и это похоже на правду. Только ориентироваться на адресное пространство в этом случае не приходится, т.к. оно общее для всех динамических библиотек, подгружаемых в один процесс. Тут нужно сравнивать отдельные адреса — создать два объекта — один создать в mylib.dll, другой — в dynaload.dll, и сравнить их vptr, а также их содержимое (можно в отладчике, а можно вывести в файл или консоль). Ради эксперимента можно также временно добавить в класс другие виртуальные функции. Если это действительно обертки, то делегирование вызовов должно быть прекрасно видно в отладчике.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.