c ++ 11 — C ++ Динамический размер объекта

Как определить размер объекта во время выполнения?

Мы не говорим о размер типа но фактический размер объекта, который может изменяться во время выполнения, например:

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 для обхода всех деталей реализации?

0

Решение

Нет, универсального способа сделать это не существует, потому что вам понадобится универсальный способ идентификации указателей внутри объектов и определения размера их ссылок. Что если вы найдете пустоту *? Что если вы найдете указатель на массив? Вы даже не можете рассчитать размер этих вещей в некоторых случаях!

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector