指向同一对象和唯一指针的不同基类型的指针

时间:2012-08-17 20:38:28

标签: c++ pointers polymorphism

我有一个抽象类Reticule定义如下:

class Reticule : public Drawable, public Object {
    //some irrelevant methods to the question
};

它用于绘制目标网格,即如果我想要一个咒语有一个圆圈或一个conal AoE reticule,我会从上面的类派生,例如:

class Circle : public Reticule {
public:
    Circle(float radius);

    //etc
};

我有另一个类World,有两个方法,一个用于注册可绘制的东西,另一个用于注册对象。

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_定义为一个唯一的指针,我现在还有两个指向它的指针,它们不是Reticule*类型的

我不应该使用unique_ptr吗?我是否将所有内容更改为shared_ptr,但在向世界添加简单对象时没有意义。

1 个答案:

答案 0 :(得分:3)

如果您希望它们“拥有”它,则无法使用unique_ptr。在这种情况下,shared_ptr是合适的。

或者你可以注册原始指针。但是,您需要确保在销毁对象之前取消注册该对象。这会产生其他问题,因为在析构函数中抛出是一件坏事。

在简单对象上使用shared_ptr很好,除非探查器告诉您这是一个问题,否则我的建议。