gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:00:29 24 4
gpt4 key购买 nike

我有一个抽象类 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 但是在向世界添加一个简单对象时这没有任何意义。

最佳答案

如果您希望它们都“拥有”它,则不能使用 unique_ptr。在那种情况下 shared_ptr 是合适的。

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

虽然在简单对象上使用 shared_ptr 没问题,但这是我的建议,除非探查器告诉您这是一个问题。

关于c++ - 指向同一对象的不同基类型的指针和唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com