Similar presentations:
Продвинутые C++
1.
Продвинутые C++2.
reinterpret_cast• Как работает?
• В чем проблемы?
• Чем полезен?
3.
Самое простое применениеВывод:
1 00111111100000000000000000000000
0x23e47ffb28 0x23e47ffb2c 4294967296
4.
Одно из полезных примененийВывод:
Copy constructor of A
Copy constructor of A
Copy constructor of A
Constructed uninitialized
array
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
Constructed class A
5.
dynamic_castКогда можно применить?
Как работает?
Особенности работы.
Чем полезен?
6.
Виды полиморфизма• Статический (связывание методов объекта на этапе
компиляции)
• Динамический (связывание методов объекта на
этапе исполнения)
7.
Статический полиморфизмВ C++ можно реализовать через CRTP (Curiously
recurring template pattern). Применяется в Clang в AST
дереве.
Плюсы:
• Быстрее динамического
• Обычно требует меньше памяти
Но обычно не такой гибкий, как динамический
8.
Пример статического полиморфизма9.
Динамический полиморфизмВ C++ реализуется с помощью виртуальных методов
Плюсы:
• Гибкий
• Крайне понятный
Минусы:
• Расходует память
• Медленный (ходим по всей памяти и чаще
промахиваемся в кэше)
10.
Динамический полиморфизм в памяти11.
Динамический полиморфизм в памяти12.
dynamic_cast13.
dynamic_cast14.
Проблема ромбовидного наследования15.
Проблема ромбовидного наследования16.
Проблема ромбовидного наследования17.
А что в памяти?18.
Перегрузка операторов new и delete19.
Перегрузка операторов new и deleteПолезно для отладки выделения памяти, но крайне
сложные правила выбора перегрузки, которых 22 для
каждого оператора…
Для контейнеров лучше перегружать аллокаторы, но это
немного сложнее, но бывает полезнее.
20.
Итераторы21.
ИтераторыВывод:
1
0
3
22.
ИтераторыВывод:
CE
1
-1