std::vector<Object> vec(n);
for (auto & member :vec)
{
member = anExistingObject;
}
此代码在标题中引发错误。但是,如果我说
auto member = anExistingObject;
然后正常工作。我只想为每个向量元素制作一个anExistingObject
的副本。为什么第一种方法会引发错误?
答案 0 :(得分:0)
为什么第一种方法会引发错误?
错误消息说明:
隐式声明的Function operator =不能被引用-这是一个已删除的函数
因此,您无法进行复制分配,因为复制分配操作符已删除。
但是,如果我说
auto member = anExistingObject;
然后正常工作
因此,您的课程是可复制构造的。这不是现有对象的分配。
为什么某些东西不可复制分配的原因是什么?
典型案例:
对于不太典型的情况,请参考规范。
您可以通过为该类显式定义副本分配运算符来使Object
可进行副本分配。
P.S。您可以更简单地像这样构造向量:
std::vector<Object> vec(n, anExistingObject);
此副本-构造矢量的元素,并且不需要分配。