【发布时间】:2019-03-12 19:42:10
【问题描述】:
我有以下代码:
std::list some_data;
...
std::list new_data = std::move(some_data);
some_data.clear();
...
问题是some_data.clear()是否有必要? (记录在案,some_data以后会重复使用)
【问题讨论】:
-
如果列表将被重复使用,那么它会清除它。
-
您以后不能重复使用
some_data。 en.cppreference.com/w/cpp/language/move_assignment -
some_data将处于未定义但正确的状态。更多关于这个近乎重复的内容:Reusing a moved container? -
使用 clear 无疑是安全的做法。但是,在移动的情况下元素会发生什么要求,这实际上意味着“有效但未指定的状态”必须是一个空列表。
-
我会对没有将列表留空的实现感到惊讶,但这不是必需的。此外,如果一个好的编译器看到了不留下空列表的优势,它就会接受它。