group-telegram.com/cxx95/27
Create:
Last Update:
Last Update:
#madskillz
Fast Pimpl
Концепцию из статьи (насколько понял, достаточно необычную) народ принял с трудом, в комментариях было бурное обсуждение и иногда непонимание.
В комментариях затронули тему Fast Pimpl (понятия, не сильно связанного со статьей). Это как раз жутко боянистая концепция.
PImpl используется, чтобы скрыть детали реализации и/или ускорить компиляцию. До его использования код в хидере выглядит так:
#include <third_party/json.hpp>Стандартный подход заключается в замене
struct Value {
third_party::Json data_;
};
T
на std::unique_ptr<T>
, потому что он разрешает использовать incomplete class:namespace third_party { struct Json; }Проблема, которая из-за этого возникает - аллокация объекта в куче, это замедляет рантайм PImpl-ового варианта ⏱ Поэтому используется подход Fast Pimpl:
struct Value {
std::unique_ptr<third_party::Json> data_;
};
struct Value {(вместо
std::aligned_storage<sizeof(T), alignof(T)> data_;
};
sizeof(T)
и alignof(T)
надо руками ввести нужную цифру)То есть вместо самого объекта в структуре лежит буфер памяти под этот объект, и рулят именно им.
В интернете есть много реализаций этой идиомы (по гуглежу "Fast Pimpl"), и есть обёртки, которые хороши собой 🍬
BY C++95
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/cxx95/27