我正在使用 Visual Studio 2012 C++,我想设置两个具有唯一指针的向量彼此相等。
using namespace std;
vector<unique_ptr<Unit>> unitVector;
vector<unique_ptr<Unit>> nonDeadUnits;
.... (stuff added to unitVector) ....
for (auto unit = unitVector.begin(); unit != unitVector.end(); ++unit) {
if ((*unit)->health > 0) {
nonDeadUnits.push_back(*unit);
}
}
unitVector.clear();
unitVector = nonDeadUnits; // error here (see below error code)
我想删除所有生命值小于 0 的单元,但是如果我尝试直接从向量中删除它们,我会尝试访问我不应该访问的内存,从而终止程序。这就是为什么我选择这样做的原因。唯一的问题是 unique_ptr 不允许我想要的复制类型。这是错误:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 2089
我想要 unique_ptr,因为向量稍后会在 for 循环中调用子类方法,它有助于覆盖。那么如何将向量设置为彼此相等还是有更好的方法?