У меня есть пара вопросов об использовании unique_ptr в контейнере. Это то, что я пытаюсь сделать:карта 2 unique_ptr's
class Stuff
{
public:
std::map<std::unique_ptr<int>, std::unique_ptr<int> > GetInfo() {return m_mapInfo;}
// Is this bad??
std::map<std::unique_ptr<int>, std::unique_ptr<int> > MoveInfo() {return std::move(m_mapInfo);}
private:
std::map<std::unique_ptr<int>, unique_ptr<int> > m_mapInfo;
};
Это не скомпилировано. Это дает мне ошибку C2248. Я использую VS2012.
Теперь я не использую unique_ptr's int; они на самом деле unique_ptr для абстрактных базовых классов, но я хотел удалить любые проблемы, связанные с тем, была ли ошибка связана с моими операциями copy/move constructors/assign.
Может ли кто-нибудь объяснить ошибку и как ее исправить?
Во-вторых, является ли моя функция MoveInfo() плохой практикой? Он может быть вызван только один раз для каждого объекта Stuff, так как член карты будет пуст после него, да?
спасибо.
Извините, я забыл, что говорит 'C2248'. –
'm_mapInfo' не копируется, поэтому' GetInfo' ошибочно, вы хотите вернуть ссылку вместо этого? – Jarod42
@ πάνταῥεῖ: [C2248] (https://msdn.microsoft.com/en-us/library/tsbce2bh.aspx) является ошибкой с видимостью. – Jarod42