用std :: move()释放内存?

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容器.

exa*_*ple 5

std::move将移动的对象保留为有效但未指定的状态.特别是它可能保持原样,所以虽然这实际上可能与stl的实现有关,但它肯定不适用于所有第三方容器.(并且在将来由于更新而导致stl的实现发生变化时,可能会在任何时候中断)