如何使用 C++11 unique_ptr实例化我的代码

How to Instantiate my code utilizing C++11 unique_ptr?

本文关键字:实例化 我的 代码 ptr 何使用 C++11 unique      更新时间:2023-10-16

在我的实验游戏引擎中,我目前正在使用原始指针在堆上创建一些游戏子系统。基本上,我的派生类使用它们的构造函数来调用 base 中的受保护构造函数,该构造函数为它们提供这些子系统的消息。我的代码是这样的:

Entity.h (基类)

#pragma once
#include <memory>
namespace BlazeGraphics{ class Graphics; }
namespace BlazePhysics{ class Physics; }
namespace BlazeInput{ class Controller; }
namespace BlazeGameWorld
{
    class Entity
    {
    protected:
        Entity(BlazeGraphics::Graphics* renderer, BlazePhysics::Physics* physics, BlazeInput::Controller* controller);
        BlazeGraphics::Graphics* renderer;
        BlazePhysics::Physics* physics;
        BlazeInput::Controller* controller;
    };
}

实体.cpp

#include "Graphics/Graphics.h"
#include "Input/Controller.h"
#include "Physics/Physics.h"
#include "Input/Input.h"
#include "Entity.h"
namespace BlazeGameWorld
{
    Entity::Entity()
    {}
    Entity::Entity(BlazeGraphics::Graphics* renderer, BlazePhysics::Physics* physics, BlazeInput::Controller* controller) :
        renderer(renderer),
        physics(physics),
        controller(controller),
        position(0.0f, 0.0f),
        velocity(0.0f, 0.0f)
    {
    }
    Entity::~Entity()
    {
    }
}

玩家.cpp(派生)

#include "Graphics/Graphics.h"
#include "Input/Input.h"
#include "Input/PlayerController.h"
#include "Physics/Physics.h"
#include "Player.h"
namespace BlazeGameWorld
{
    Player::Player() :
        Entity(new BlazeGraphics::Graphics, new BlazePhysics::Physics, new BlazeInput::PlayerController)
    {
    }
    Player::~Player()
    {
    }
}

我将如何更新()此代码以正确利用C++11的unique_ptr?我无法弄清楚如何在我的课堂上正确初始化这个智能 ptr。

这非常简单。您只需将所有原始指针定义更改为std::unique_ptr,基本上您就完成了。

std::unique_ptr<BlazeGraphics::Graphics> renderer;

唯一指针的初始化方式与初始化原始指针的方式相同。当保存它们的对象死亡时,它们将自动删除,因此您无需在析构函数中手动释放内存(如果您有任何delete <...>语句,请删除它们)。

您也不需要更改使用指针的代码,因为它们指向的对象是使用运算符访问->与使用原始指针相同。