Gam*_*per 0 c++ move-semantics c++11
我说有一个标准容器的类:
class Library{
std::vector<Book> books;
public:
void putOnFire(){
books.clear();
}
};
Run Code Online (Sandbox Code Playgroud)
清除容器的常用方法是"清除",但是大多数代码不符合"STL",因此许多容器(第三方)可能没有"清除"方法.但是,如果他们有移动语义我可以使用std :: move对吗?
void putOnFire(){
auto p = std::move(books); //books cleared when p out of scope
}
Run Code Online (Sandbox Code Playgroud)
这是编写大多数通用的可能代码,这些代码也适用于不具有"clear"方法的STL容器.
std::move将移动的对象保留为有效但未指定的状态.特别是它可能保持原样,所以虽然这实际上可能与stl的实现有关,但它肯定不适用于所有第三方容器.(并且在将来由于更新而导致stl的实现发生变化时,可能会在任何时候中断)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |