В моем экспериментальном игровом движке я в настоящее время создаю некоторые подсистемы игры на куче с необработанными указателями. В принципе, мои производные классы используют свои конструкторы для вызова защищенного конструктора в базе, какие новости для этих подсистем для них. Мой код это примерно так:Как создать код моего кода, используя C++ 11 unique_ptr?
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;
};
}
Entity.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()
{
}
}
Player.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? Мне трудно понять, как правильно инициализировать этот умный ptr в моих классах.
Я бы предупредил об использовании unique_ptr для всего. Я хотел бы предложить минутку, чтобы посмотреть, какие типы объектов нужно будет получить из разных единиц перевода и классов из общего проекта, а для тех, которые соответствуют этому описанию, вместо этого я бы использовал shared_ptr. Теперь, что касается объекта, который будет существовать один раз и будет иметь время жизни приложения, тогда имеет смысл иметь уникальный_ptr этого объекта. –