繁体   English   中英

unique_ptr - 无效指针和段错误

[英]unique_ptr - invalid pointer and segfault

我正在学习一个新的C ++ 11标准并在SFML中编写小游戏。 我已经遵循代码,我试图将精灵的指针传递给另一个对象。

bool Game::detectCollision()
{
    std::unique_ptr<sf::Sprite> sprPtr1(&iPlayer.charSprite);
    return field.detectCollision(sprPtr1);
}

bool FieldElem::detectCollision(std::unique_ptr<sf::Sprite> charSprite)
{
    std::cout << "X: " << charSprite->getPosition().x << std::endl;
    return true;
}

此代码在没有警告的情况下编译,并在运行时给出了以下段错误:

*** glibc detected *** ./game: munmap_chunk(): invalid pointer: 0x00007fffb8617d90 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f8694b37b96]
./game(_ZN2sf6SpriteD0Ev+0x24)[0x405772]

为什么指针无效? 我想我错过了一些关于unique_ptr的重要细节......

std::unique_ptr假定指向对象的唯一所有权,并在unique_ptr超出范围时删除该对象。 所以在detectCollision返回后, charSprite被删除。 既然你从未真正分配过charSprite (而是分配了iPlayer ,其中包含了charSprite ),那就不是犹太教了。

听起来你实际上并不想在这里找到unique_ptr 您不打算转让所有权。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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