我正在尝试创建一个无法复制或移动的类数组.所以我需要就地创建对象,我无法弄清楚如何做到这一点:
#include <vector>
struct Foo {
Foo(int) { }
Foo(const Foo &) = delete;
Foo & operator =(const Foo &) = delete;
Foo(Foo &&) = delete;
Foo & operator =(Foo &&) = delete;
};
struct Bla {
Bla(const std::vector<int> & args) {
for (auto i : args) {
foo.emplace_back(i);
}
}
std::vector<Foo> foo;
};
Run Code Online (Sandbox Code Playgroud)
编译器抱怨删除的移动构造函数,因为它不能保证所有对象都就地构造并且从不移动.我不必使用std::vector容器,所以请随意提出其他建议.
您可以使用std::vectors迭代器对构造函数来构造对象
Bla(const std::vector<int> & args)
: foo(args.begin(), args.end())
{}
Run Code Online (Sandbox Code Playgroud)
如果您需要在构造中包含其他参数,则可以切换到任何基于节点的容器,例如 std::list
struct Bla {
Bla(const std::vector<int> & args) {
for (auto i : args) {
foo.emplace_back(i, some_other_argument);
}
}
std::list<Foo> foo;
};
Run Code Online (Sandbox Code Playgroud)