我注意到,当包含类型包含unique_ptr时,不可能删除矢量的元素。如何在包含对象包含unique_ptr时删除矢量的元素?
例如这个类:
class Bar
{
std::unique_ptr<int> pointerTest;
Bar(Bar &bar) {};
public:
Bar() { pointerTest = std::unique_ptr<int>(new int); }
Bar(Bar &&bar) { this->pointerTest = move(bar.pointerTest); }
void testFunc() { pointerTest.release(); }
};
这不会与这种用法工作:
int main()
{
vector<Bar> test123;
Bar foo;
test123.push_back(move(foo));
test123.erase(test123.begin());
}
//Error 1 error C2280: 'std::unique_ptr<int,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : attempting to reference a deleted function c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0 611 1 testing
的代码将工作时,你只调用对象的方法,而不是擦除:
for (auto &item : test123)
item.testFunc();
为什么我不能在矢量上使用擦除,我该如何解决这个问题?
FWIW,你的代码在g ++ 4.6下编译。 – user4815162342
我可以通过删除不必要的移动构造函数和奇怪的副本构造函数来解决GCC 4.8上的问题。我不知道问题到底是什么,或者是否会为您的编译器解决问题。 –
奇怪的是,我无法在visual studio 2013上编译此文件,无论是否带有复制和移动构造函数。 @Mike Seymour关于这些构造函数的连线是什么? – Dagob