2015-08-28 7 views
1

Я пытаюсь реализовать несколько алгоритмов кэширования, где можно заменить другой во время выполнения.Интерфейс C++ возвращает ссылку - это плохая практика?

Так я начал с описания интерфейса:

class ICache 
{ 
    public: 
    virtual ~ICache(){} 
    virtual const std::vector<SomeValue>& getSomeValues() const = 0; 
    virtual const std::vector<AnotherValue>& getAnotherValues() const = 0; 
    ... 
} 

И вот идет мой вопрос - это плохая практика, чтобы вернуть ссылку на интерфейс?

Такой дизайн обеспечивает и обеспечивает внутреннюю реализацию класса, который его реализует (поскольку он «должен» хранить все векторы в качестве членов).

Есть ли лучший способ?

+0

Класс может хранить только ссылки или приносить их по требованию из другого места. –

+0

Это хорошая привычка, нет ничего плохого в возвращении ссылок на const, это эффективно. – Melkon

+2

Как вы можете убедиться, ваш класс кэша переживает любые внешние ссылки на эти значения, это прекрасно. Однако, если вы хотите переключить класс кэширования во время выполнения, это всегда будет иметь место. Предполагая, что ваши классы Cache уничтожают кэшированные объекты в конце их жизни. Какие объекты вы планируете кэшировать? – MikeMB

ответ

1

Я не вижу никаких трудностей с возвратом ссылок в этом контексте. Интерфейс - это всего лишь контракт между абонентом и службой. Я согласен с тем, что характер этого контракта, по-видимому, подразумевает, что в кэше лучше хранить данные внутри себя таким образом, но не принуждает реализацию к этому; и с точки зрения реализации он позволяет использовать механизм, который может быть очень эффективным при правильном использовании (в отличие от принудительного создания нового вектора и передачи его по значению).

Смежные вопросы