[英]Error C2280: attempting to reference a deleted function (unique_ptr)
我查看了一些使用原始指针的旧代码,并改为将其更改为unique_ptr
。 现在,当我尝试编译代码时,我收到以下错误消息:
错误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
s无法复制; 只感动! 但是因为std::list
应该能够在内部移动它们,所以你唯一的问题应该是你正在对列表本身执行的赋值。
你能移动清单吗?
std::list<PEnemy> enemies = std::move(Game::LEVEL->getEnemies());
或者使用对它的引用?
const std::list<PEnemy>& enemies = Game::LEVEL->getEnemies();
如果不是(并且它将取决于Game::LEVEL->getEnemies()
的返回类型,您可以使用上述解决方案中的哪一个),那么您将需要进行深度,深度复制或者切换到shared_ptr
。
这一切似乎都是一种障碍,但它实际上是通过严格执行关于你的所有权的规则来帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.