我可以调整移出的矢量的大小吗?

vso*_*tco 8 c++ cryptography move move-semantics c++11

我有一些代码,我想绝对确保移出的代码std::vector不会留下秘密数据(考虑加密密钥管理)。在我的班级的移动构造函数中,我做了类似的事情:

X(X&& rhs): secret_vector{std::move(rhs.secret_vector)}{
    rhs.secret_vector.resize(N);
    safe_zero(rhs.secret_vector); // zero out all elements
    rhs.secret_vector.resize(0);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我在离开秘密向量后重新使用它。我在看

重复使用移动的容器?

但我并不完全清楚我可以做到这一点(我不明白“先决条件”到底是什么)。

我的问题是:我可以调整从 std::vector 移出的大小,对其执行一些操作,然后将其大小调整回零吗?

Jar*_*d42 5

我的问题是:我可以调整从 std::vector 移出的大小,对其执行一些操作,然后将其大小调整回零吗?

移出的对象应处于未指定但有效的状态。

所以你有权调整它的大小(不需要任何先决条件)。safe_zero 它,并清除它。

(我不明白“先决条件”到底是什么)。

有一些状态条件要求对象必须不调用 UB。

例如,operator[](std::size_t i)要求i < size().

resize()clear()没有要求。