我有一个这样的课程:
class MyClass
{
public:
MyClass();
~MyClass();
void addPlayer(Player* player);
private:
Player* p_player;
}
addPlayer方法尝试完成以下操作:
p_player = player;
这个想法是存储有关Player类型对象的信息,以便能够动态检查其位置。但是,此解决方案会导致访问违规写入位置"。使用:
Player* _player = player;
在函数中不会崩溃,但这意味着我没有将指针存储在类本身中以用于该类的其他函数。
编辑: 该问题很可能是与项目中其他地方相关的问题。我会更仔细地从头开始重做项目的一部分。谢谢你的答案。
答案 0 :(得分:0)
你的Player*
原始指针是什么?它是拥有指针吗?它是观察指针吗?
如果它是一个拥有指针,你的类中不应该只有一个原始指针:你最好使用智能指针,如unique_ptr
(或{{1} }):
shared_ptr
您可能希望阅读有关The Rule of Three的更多信息,以获取有关C ++中类副本和正确资源管理的更多信息。
如果它是一个观察指针,那么原始指针就可以了;但请确保观察到的Player的生命周期超过引用它的#include <memory> // for unique_ptr
class MyClass {
...
private:
std::unique_ptr<Player> m_player;
};
实例的生命周期。
答案 1 :(得分:0)
听起来像你:
void MyClass::addPlayer(Player* player)
{
Player _player = player;
}
将其更改为:
void MyClass::addPlayer(Player* player)
{
p_player = player;
}