Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_Pointers_Constructor - Fatal编程技术网

C++ 如何在C++;?

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

因此,我有一个名为Player的类,其中包含私有指针变量:

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,谢谢