Я пытаюсь реализовать несколько алгоритмов кэширования, где можно заменить другой во время выполнения.Интерфейс C++ возвращает ссылку - это плохая практика?
Так я начал с описания интерфейса:
class ICache
{
public:
virtual ~ICache(){}
virtual const std::vector<SomeValue>& getSomeValues() const = 0;
virtual const std::vector<AnotherValue>& getAnotherValues() const = 0;
...
}
И вот идет мой вопрос - это плохая практика, чтобы вернуть ссылку на интерфейс?
Такой дизайн обеспечивает и обеспечивает внутреннюю реализацию класса, который его реализует (поскольку он «должен» хранить все векторы в качестве членов).
Есть ли лучший способ?
Класс может хранить только ссылки или приносить их по требованию из другого места. –
Это хорошая привычка, нет ничего плохого в возвращении ссылок на const, это эффективно. – Melkon
Как вы можете убедиться, ваш класс кэша переживает любые внешние ссылки на эти значения, это прекрасно. Однако, если вы хотите переключить класс кэширования во время выполнения, это всегда будет иметь место. Предполагая, что ваши классы Cache уничтожают кэшированные объекты в конце их жизни. Какие объекты вы планируете кэшировать? – MikeMB