Как определить размер среды выполнения объекта?C++ Динамический размер объекта
Мы не говорим о size of the type, но фактический размер объекта, который может изменяться во время выполнения, например:
vector<int> v;
auto a = MagicSizeF(v); // magic size function
v.push_back(2);
v.push_back(2);
// this should hold - ok there's small consainer optimizations and initial
// vector capacity and implementation details, but you get what I mean
assert(MagicSizeF(v) > a);
В векторном случае это может быть реализовано, как это:
template<typename T>
auto MagicSizeF(vector<T> const& v) {
return v.size()*sizeof(T); // or v.capacity() to be strict
// other implementation details memory consumers could be added
}
но существует ли стандартный/общий способ сделать это для объектов произвольного типа? Должен ли ABI обойти все детали реализации?
Не связанный с вашим фактическим вопросом, но небольшая оптимизация буфера невозможна с помощью 'std :: vector', потому что' swap() 'не разрешено отменять итераторы. – Praetorian