依赖类中的所有权和shared_ptr

时间:2013-07-12 17:29:07

标签: c++ shared-ptr ownership

在我的程序中,我正在绘制一个屏幕文本块,我希望能够找到与给定像素对应的文本。在我的架构中,有两个类,text_viewdraw_devicedraw_device是一个抽象基类,它提供绘图函数以及以像素形式计算给定文本块大小的函数。 text_view是一个类,用于存储有关块和文本行在屏幕上的位置的信息,以加快查找和重绘操作。

由于text_view存储像素信息,因此必然取决于draw_device的选择。如果使用了不同的draw_device,则可能会略微改变文本,并使text_view存储处于不一致状态。

我的问题是,如何最好地表达这种关系?

我可以让这两个类的用户处理它,并为每个被调用的函数传入draw_device引用。他们需要总是传递相同类型的draw_device或者会发生邪恶。

class text_view{
public:
    void rearrange_text(const draw_device &);
    int lookup_text(const draw_device &, int x, int y) const;
    void draw_text(draw_device &) const;
};

我可以将text_view中的裸指针保存到draw_device以简化功能接口,代价是要求类的用户处理管理生命周期问题

class text_view{
    draw_device * device;
public:
    void rearrange_text();
    int lookup_text(int x, int y) const;
    void draw_text() const;
    void change_draw_device(draw_device *);
};

我可以在shared_ptr中保留text_view,这样用户就不必担心生命周期问题,代价是强制他们使用shared_ptr代替堆栈分配或unique_ptr等。

我不喜欢shared_ptr解决方案,因为我认为text_view不应该拥有draw_device。它只是它的用户。

0 个答案:

没有答案