假設我有一個類C
,唯一的目的是填寫C
的某個類型的容器con_m
。因此,C
擁有以特定方式填寫con_m
的方法。 C
已填滿con
我不再需要C
,所以我想將con_n
轉儲到另一個變量中。但是C
實際上是一個仿函數,因爲con_m
只能遞增填充,所以不能是填充函數的局部對象。此外,實現應該隱藏給用戶,所以他不需要在返回con_m
的函數上調用std::move
。是否使用std :: move來轉儲成員可接受的設計?
template <class container_type> class C {
public:
template <class T> void fill_some_more(const T &t) {
// do stuff with t filling con_m by another increment
}
container_type dump_container() { return std::move(con_m); }
container_type con_m;
};
int main() {
C<std::vector<int>> c;
while (some_condition) {
c.fill_some_more(some_int);
}
auto con = c.dump_container();
}
這是否適合使用std::move
?
聽起來像'C'的方法可能更適合以容器作爲參數的獨立函數。如果首先不是會員,那麼您不會遇到將集裝箱從課堂中挖出的問題。 –
似乎取決於您的移動構造函數是否將源對象留在期望的狀態 –
我會說不。通常移動構造函數不需要將容器留空。 – immibis