У меня есть структура, которая имеет unique_ptr
внутри. Затем у меня есть vector
этой структуры. Если я попытаюсь изменить размер (или использовать резерв) на вектор, я получаю ошибки компиляции. Ниже приведен урезанный пример, который все еще вызывает проблему.
struct Test
{
unique_ptr<int> pValue;
};
void test()
{
// this doesn't compile
vector<Test> testVector;
testVector.resize(5);
// this also doesn't compile
testVector.reserve(5);
// this, of course, compiles
vector<unique_ptr<int>> testVector2;
testVector2.resize(5);
testVector2.reserve(5);
}
Ошибки я получаю жалобы по поводу доступа к закрытым членам unique_ptr
(операторы присваивания). Компилятор пытается динамически построить Test &Test::operator =(const Test &)
и Test::Test(const Test &)
. Я не понимаю, почему операция изменения размера должна вызвать любую из этих функций (почему бы ей не вызвать конструктор по умолчанию, если это необходимо?). Оба они представляют проблемы, потому что невозможно сделать либо unique_ptr
из-за const
.
Я ценю прерывание! :-) Я никогда бы не догадался, что проблема в том, что V10 (и теперь VC11) не реализует 'noexcept'. http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx – dsmtoday