爲什麼公共構造函數(和析構函數)不能將一個類型爲T
的對象置於向量的後面?以下片段格式不正確。爲什麼類型T要放在一個向量的末尾需要移動才能構造?
#include <vector>
struct Foo {
Foo() {}
Foo(int) {}
~Foo() {}
Foo(const Foo&) = delete;
Foo& operator=(const Foo&) = delete;
};
int main() {
std::vector<Foo> vfoo(10);
vfoo.emplace_back();
}
的emplace_back
要求Foo
至少可移動構造的,而這個代碼無法編譯,因爲移動構造函數與拷貝構造函數一起被刪除。但我想象emplace_back
使用placement new調用默認構造函數。
當容器大小調整並且需要複製現有內容時,您會發生什麼? –
請參閱http://en.cppreference.com/w/cpp/container/vector/emplace上的「參數」下的「類型要求」 – o11c
@ o11c「emplace」和「emplace_back」是不同的東西,無論如何,問題這就是爲什麼有這樣的要求,而不是要求是什麼。 –