-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
factory pattern의 스마트 포인터화 시켜봤는대 이게 맞는지 모르겠네요
20.10.15 13:49 작성 조회수 132
0
//Example클래스는 변함이 없고
namespace jm
{
class Example : public Game2D
{
float time = 0.0f;
std::vector<std::shared_ptr <Shape>> my_objs;
public:
Example() : Game2D()
{
my_objs.push_back(Shape::makeTriangle(Colors::gold, vec2{ -0.5f,0.2f }, 0.25f));
my_objs.push_back(Shape::makeCircle(Colors::olive, vec2{ -0.1f,0.1f }, 0.2f));
my_objs.push_back(Shape::makeBox(Colors::black, vec2{ 0.0f,0.5f }, 0.1f, 0.3f));
my_objs.push_back(Shape::makeStar(Colors::gold, vec2{ 0.0f,-0.5f }, 0.25f,0.15f));
//my_objs.push_back(new Triangle(Colors::gold, { -0.5f,0.2f }, 0.25f));
//my_objs.push_back(new Circle(Colors::olive, { -0.1f,0.1f }, 0.2f));
//my_objs.push_back(new Box(Colors::black, { 0.0f,0.5f }, 0.1f, 0.3f));
}
~Example() {
}
void update() override
{
for (const auto &obj : my_objs) {
obj->draw();
}
}
};
//shape.h의 static 함수들을
shared_ptr화 시켜주는 작업
#pragma once
#include "Game2D.h"
#include "Shape.h"
namespace jm {
class Shape {
public:
vec2 pos;
RGB color;
void init(const RGB& _color, const vec2& _pos,float _r=0.0f)
{
this->color = _color;
this->pos = _pos;
}
virtual ~Shape() {
}
virtual void drawShape() const = 0; //pure virtual classes
void draw() {
beginTransformation();
{
translate(this->pos);
drawShape();
}
endTransformation();
}
static std::shared_ptr<Shape> makeTriangle(const RGB& _color, const vec2& _pos, const float& _size);
static std::shared_ptr <Shape> makeCircle(const RGB& _color, const vec2& _pos, const float& _size);
static std::shared_ptr<Shape> makeBox(const RGB& _color, const vec2& _pos, const float& _width, const float& _height);
static std::shared_ptr<Shape> makeStar(const RGB& _color, const vec2& _pos, const float& _outer_radius, const float& _inner_radius);
};
}
//이렇게 해준 후
//Shape.cpp
#include "Shape.h"
#include"Triangle.h"
#include"Circle.h"
#include"Box.h"
#include"Star.h"
namespace jm {
std::shared_ptr<Shape> Shape::makeTriangle(const RGB& _color, const vec2& _pos, const float& _size) {
return std::make_shared<Triangle>(_color, _pos, _size);
}
std::shared_ptr <Shape> Shape::makeCircle(const RGB& _color, const vec2& _pos, const float& _size) {
return std::make_shared<Circle>(_color, _pos, _size);
}
std::shared_ptr <Shape> Shape::makeBox(const RGB& _color, const vec2& _pos, const float& _width, const float& _height) {
return std::make_shared <Box>(_color, _pos, _width, _height);
}
std::shared_ptr <Shape> Shape::makeStar(const RGB& _color, const vec2& _pos, const float& _outer_radius, const float& _inner_radius) {
return std::make_shared <Star>(_color, _pos, _outer_radius, _inner_radius);
}
}
//위에처럼 바꿔주면 돼는거 같은대
//소멸자가 정상적으로 호출되는거 같거든요 cout 찍어보니까
//맞나요?
답변을 작성해보세요.
0
홍정모
지식공유자2020.10.16
안녕하세요? 코드를 자세히 봐드리기는 어렵습니다만, make_shared를 잘 쓰신 것 같습니다. 더 자세한 내용은 따배씨++ 강의에서 다룹니다.
답변 1