如何使用 C++11 unique_ptr实例化我的代码
How to Instantiate my code utilizing C++11 unique_ptr?
在我的实验游戏引擎中,我目前正在使用原始指针在堆上创建一些游戏子系统。基本上,我的派生类使用它们的构造函数来调用 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 <...>
语句,请删除它们)。
您也不需要更改使用指针的代码,因为它们指向的对象是使用运算符访问->
与使用原始指针相同。
相关文章:
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我不能引用指向实例化对象的函数的指针?
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 您能否实例化模板的非专用版本并在专用化中继承它?
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 类模板实例化中的类型转换
- clang:使用 O3 导出隐式实例化函数的符号
- 用字符串初始化我的类的对象
- 如何实例化类的公共成员并将其作为 std::p romise 返回?
- 在 Xcode 中实例化后的显式专用化
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 使用 SFINAE 有选择地实例化模板的成员函数
- 模板类实例化中的指针转换无效
- 无法实例化重载的模板化函数
- 尝试在构造函数中的"glm::cross"处初始化我的类段错误
- 与模板实例化相关的编译错误
- 如何使用 C++11 unique_ptr实例化我的代码
- 当丢失非const虚拟方法时,为什么我不能实例化类的const实例
- 我可以使用decltype()来避免显式模板实例化中的代码重复吗
- C++:无法用new实例化我的类