【发布时间】:2014-02-25 08:57:51
【问题描述】:
我正在学习新的 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 的重要细节......
【问题讨论】:
-
是否使用
new分配了charSprite? -
您的代码甚至不应该编译,因为
std::unique_ptr不可复制,只能移动。
标签: c++ pointers c++11 sfml unique-ptr