作为这两个问题的具体子句:
人们不禁要问:是合法的调用.clear(),.chrink_to_fit(),.empty()在移动,从std::vector给它分配一个新的载体之前?我可以问一下,push_back()但我不知道会给出什么,因为依靠从向量移动的空是不安全的.
显而易见的是,破坏以及从新载体分配是合法的.
std::vector<int> fs = getVec();
giveVecs(std::move(fs));
fs.empty(); // 1.?
fs.size(); // 2.?
fs.shrink_to_fit(); // 3.?
fs.clear(); // //4. ?
fs = {} ; // 5. Should be fine, but weird when we have .clear()
fs.push_back(1); //
Run Code Online (Sandbox Code Playgroud)
编辑:
我应该澄清,有些操作确实有前提条件:因此,(正如你可以在其他问题中看到的那样),并非所有操作在移动后都是合法的.
因此,我的问题可以这样重述:三种操作中的任何一种都有任何先决条件吗?问题的一个原因可能是与从对象移动的分配器相关的精细打印.
是.移动对象会使其处于未指定但有效的状态.
所以,你可以打电话clear,shrink_to_fit,empty,push_back,等.
但是你可能应该从clear那个未指明的限定符开始:).