提升small_vector无法返回使用堆栈空间

时间:2019-01-29 20:31:32

标签: c++ boost

我一直在使用boost::container::small_vector存储对象集。

假设我正在使用boost::container::small_vector<T, 1>,我非常了解,一旦容器中的元素数量超过一定数量,它将退回到使用动态存储而不是使用自动存储的方式。但是,如果我将small_vector的大小重新设置为0元素,则似乎无法恢复数据以再次使用自动存储。

int main() {
    typedef boost::container::small_vector<int, 1> V;
    auto print = [](V& v) {
        std::cout << "v.data=" << v.data() << " v.size=" << v.size()
                  << std::endl;
    };

    V v;
    print(v);
    for (int i = 0; i < 4; ++i) {
        v.push_back(i);
        print(v);
    }
    v.clear();
    print(v);
    v.shrink_to_fit();
    print(v);
    v = std::move(V());
    print(v);
    v = {};
    print(v);
    V v2;
    v.swap(v2);
    print(v);
    for (int i = 0; i < 2; ++i) {
        v.push_back(i);
        print(v);
    }
}

打印

v.data=0x7fffffff7f18 v.size=1
v.data=0x7fffffff7f18 v.size=2
v.data=0x627c20 v.size=3
v.data=0x627c40 v.size=4
v.data=0x627c40 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0 v.size=0
v.data=0x627c40 v.size=1
v.data=0x627c20 v.size=2

如何使small_vector再次使用自动存储?

0 个答案:

没有答案