我有一个Reticule
像这样定义的抽象类:
class Reticule : public Drawable, public Object {
//some irrelevant methods to the question
};
它用于绘制目标标线,即如果我想要一个具有圆形或锥形 AoE 标线的法术,我将从上述类派生,例如:
class Circle : public Reticule {
public:
Circle(float radius);
//etc
};
我有另一个World
具有 2 个方法的类,一个用于注册可绘制的东西,另一个用于注册对象。
class World {
public:
void registerDrawable(Drawable* drawable);
void registerObject(Object* object);
//other irrelevant methods
private:
std::list<Drawable*> drawables_;
std::list<Object*> objects_;
};
这些函数添加指向相关容器的指针。这允许世界中的对象相互交互。
在我的咒语中,我正在像这样创建标线:
reticule_ = std::unique_ptr<Recitule>(new Circle(3.0f));
我的问题是,我打算如何将标线注册到我的World
班级。它可以做到这一点:
world.registerDrawable(&(*reticule_));
world.registerObject(&(*reticule_)));
但这对我来说似乎不正确,因为我将其定义reticule_
为唯一指针,现在我还有 2 个指向它的指针,它们只是不是类型Reticule*
我不应该使用unique_ptr
吗?我是否将所有内容都更改为,shared_ptr
但是在向世界添加简单对象时这没有意义。