Я изучаю новый стандарт C++ 11 и записываю маленькую игру в SFML. Я выполнил код, где я пытаюсь передать указатель спрайта на другой объект.unique_ptr - неверный указатель и segfault
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;
}
Этот код компилируется без предупреждения и дает мне следующее Segfault во время выполнения:
*** 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 ...
Был ли 'charSprite' выделен с использованием' new'? –
Ваш код не должен компилироваться, так как 'std :: unique_ptr' не может быть скопирован, доступен только для перемещения. – Sean