我经历了一些使用原始指针并将其改为unique_ptr
s的旧代码。现在,当我尝试编译代码时,出现以下错误消息:
错误1错误C2280:'std :: unique_ptr> :: unique_ptr(const std :: unique_ptr <_Ty,std :: default_delete <_Ty >>&)':试图引用已删除的函数d:\ visual studio 2013 \ vc \包括\ xmemory0
有关此情况的编译器输出非常大-为了节省此问题的空间,请在此处查看。
据我所知,这与我使用唯一指针的方式有关。它从这里开始(level.h,第65-66行):
typedef std::unique_ptr<Enemy> PEnemy;
std::list<PEnemy> m_enemies;
现在,我在编译器输出中获得的下一个线索是basesource.cpp中的第47行:
std::list<PEnemy> enemies = Game::LEVEL->getEnemies();
为什么这会引起问题?我该如何解决错误?
unique_ptr
不能复制;只感动!但是由于std::list
应该能够在内部移动它们,所以唯一的问题应该是您要对列表本身执行分配。
您可以移动清单吗?
std::list<PEnemy> enemies = std::move(Game::LEVEL->getEnemies());
还是改用引用?
const std::list<PEnemy>& enemies = Game::LEVEL->getEnemies();
如果没有,那么(这取决于Game::LEVEL->getEnemies()
您可以使用上述解决方案中的哪一个的返回类型),您将需要进行深层复制或切换为深层复制shared_ptr
。
这一切似乎都是一个障碍,但实际上,通过严格执行有关指尖所有权的规定,这实际上对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句