如何確定對象的運行時大小?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 2014-08-28 07:55:51