Это зависит от контекста, но, как правило, в кэш-памяти в памяти хранится некоторое значение, чтобы его можно было извлечь позже, вместо создания нового объекта.Чаще всего это используется в сочетании с базами данных - или действительно с любым приложением, в котором создание / извлечение объекта стоит дорого .
. Для простого кэша памяти представьте следующий фиктивный класс (которыйнарушает тонны лучших практик, так что не копируйте!):
class Integer {
int value;
public:
Integer(int value) : value(value) {
sleep(1000); // Simulates an expensive constructor
}
};
Теперь представьте, что вам нужно создать экземпляры этого класса:
Integer one(1);
Integer two(2);
// etc.
… но позже (вдругой метод) возможно, вам нужно создать новый экземпляр 2:
Integer two(2);
Это дорого.Что если бы вы могли переработать старое значение?Используя конструкторы, это невозможно, но используя фабричные методы, мы можем сделать это легко:
class Integer {
int value;
static std::map<int, Integer> cache;
Integer(int value) : value(value) {
sleep(1000); // Simulates an expensive constructor
}
friend Integer make_int(int);
};
Integer make_int(int value) {
std::map<int, Integer>::iterator i = Integer::cache.find(value);
if (i != Integer::cache.end())
return i->second;
Integer ret = Integer(value);
Integer::cache[value] = ret;
return ret;
}
Теперь мы можем использовать make_int
для создания или извлечения целого числа.Каждое значение будет создано только один раз:
Integer one = make_int(1);
Integer two = make_int(2);
Integer other = make_int(2); // Recycles instance from above.