我有一个不可复制的类(即复制构造函数和赋值运算符被标记为'delete')。我想将它们保存在std :: vector中。
它是一个RAII类,所以只是存储指针或引用它不是我想要的。
我对新初始化列表的了解&移动构造函数有点受限,这可能吗?
答案 0 :(得分:18)
是的,如果std::vector<NotCopyable>
可移动,您可以NotCopyable
:
struct NotCopyable
{
NotCopyable() = default;
NotCopyable(const NotCopyable&) = delete;
NotCopyable& operator = (const NotCopyable&) = delete;
NotCopyable(NotCopyable&&) = default;
NotCopyable& operator = (NotCopyable&&) = default;
};
int main()
{
std::vector<NotCopyable> v;
NotCopyable nc;
v.push_back(NotCopyable{});
v.emplace_back();
v.push_back(std::move(nc));
}
答案 1 :(得分:2)
只要这些元素是可移动的,是的,只需将它们存储在向量中即可。