Владение и shared_ptr в зависимых классах

В моей программе я рисую блок текста на экране и хочу найти текст, соответствующий данному пикселю. В моей архитектуре есть два класса, text_view и draw_device, draw_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, Это просто пользователь этого.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]