C++ 如何在C++;?
因此,我有一个名为Player的类,其中包含私有指针变量:C++ 如何在C++;?,c++,pointers,constructor,C++,Pointers,Constructor,因此,我有一个名为Player的类,其中包含私有指针变量: class Player { public: Player(); void update(); void draw(); private: InputCp* input; PhysicsCp* physics; GraphicsCp* graphics; }; InputCp、PhysicCsp和GraphicsCp中的每一个都有类似以下内容的构造函数: PhysicsCp::Phys
class Player
{
public:
Player();
void update();
void draw();
private:
InputCp* input;
PhysicsCp* physics;
GraphicsCp* graphics;
};
InputCp、PhysicCsp和GraphicsCp中的每一个都有类似以下内容的构造函数:
PhysicsCp::PhysicsCp()
{
// adjust values to change player physics
normMaxSpeedX = 10;
maxSprintSpeedX = 20;
normAccel = 1;
sprintAccel = 2;
gravity = 2;
initialJumpSpeed = 10;
}
我如何使它在调用播放器构造函数时,输入、物理和图形实例的构造函数也是如此?只是不要使用指针: 做: 您的默认构造函数将被调用
注意:
- 如果您确实需要指针(事实上,您很少需要),请使用智能指针(
),以避免与指针相关的内存管理出现通常的混乱std:unique_ptr
注意:
- 如果您确实需要指针(事实上,您很少需要),请使用智能指针(
),以避免与指针相关的内存管理出现通常的混乱std:unique_ptr
Player::Player()
{
input = new InputCp;
physics = new PhysicsCp;
graphics = new GraphicsCp;
}
但是要确保不会泄露它们,所以在析构函数中删除它们
Player::~Player()
{
delete input;
delete physics;
delete graphics;
}
它们需要在构造函数中创建
Player::Player()
{
input = new InputCp;
physics = new PhysicsCp;
graphics = new GraphicsCp;
}
但是要确保不会泄露它们,所以在析构函数中删除它们
Player::~Player()
{
delete input;
delete physics;
delete graphics;
}
“它有实例”是什么意思Player
没有任何实例,它只有一堆指针。如果要使用原始指针动态分配对象,强烈建议为Player类提供析构函数。或者使用智能指针,“它有实例”是什么意思Player
没有任何实例,它只有一堆指针。如果要使用原始指针动态分配对象,强烈建议为Player类提供析构函数。这种风格的问题是,如果PhysicSP或GraphicCp的构造函数抛出,就会泄漏内存。unique_ptr或任何其他安全指针都会阻止这种情况。另一个问题是使用赋值而不是初始化列表。这种样式的问题是,如果PhysicSP或GraphicCp的构造函数抛出,则会泄漏内存。unique_ptr或任何其他安全指针都会阻止这种情况。另一个问题是赋值的使用,而不是初始化列表。我遇到的问题是,当我这样做时,它告诉我输入、物理和图形都有不完整的类型。(Player.h文件使用Cp类的前向减速)是否有其他方法解决此问题?是否必须使用前向声明?如果你真的需要指针,请看我的笔记,如果你需要,我可以解释它。我不确定是否必须,我认为这只是一个很好的练习。执行#include可能会导致循环依赖问题,这是您需要它时的良好做法,即避免循环包含。如果你不需要它,就使用#includes
是的,我也这么想。嗯,我可以不用使用#include,所以谢谢你。我的问题是,当我这样做时,它告诉我输入、物理和图形都有一个不完整的类型。(Player.h文件使用Cp类的前向减速)是否有其他方法解决此问题?是否必须使用前向声明?如果你真的需要指针,请看我的笔记,如果你需要,我可以解释它。我不确定是否必须,我认为这只是一个很好的练习。执行#include可能会导致循环依赖问题,这是您需要它时的良好做法,即避免循环包含。如果你不需要它,就使用#includes
是的,我也这么想。好吧,我可以不用使用#include,谢谢