繁体   English   中英

错误C2280:尝试引用已删除的函数(unique_ptr)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM