포함 된 유형에 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