Гуру ООП!
Подскажите пожалуйста, как лучше поступить в следующей ситуации.
Есть класс с большим количеством свойств и getters/setters к ним. В процессе выполнения программы создается большое количество(миллионы) объектов этого класса. Практически все созданные объекты необходимо держать в памяти. Но есть возможность сэкономить память, поскольку многие объекты создаются по шаблону(имеющему id) и большая часть свойств таких объектов дублируется.
Идея состоит в том, чтобы вынести наиболее часто дублирующиеся и неизменяемые, в процессе работы, свойства в отдельный класс и хранить readonly экземпляры этого класса в синглтоне.
Суть проблемы состоит в том, что необходимо также оставить возможность создавать полноценные ReadWrite объекты исходного класса. То-есть хочется создать видимость что исходный класс не изменился, но вырезать половину его свойств, а при запросе таких свойств отдавать их либо из readonly синглтона, либо из ReadWrite части, в зависимости от того "уникальный" это объект или нет.
Вобщем конечно можно ввести в описание исходного класса пару указателей на будущие классы-части. Например:
class cSource {
...
cObjectPart *ropart;
cObjectPart *rwpart;
...
};
И проверяя их на NULL "понимать" с каким типом объекта мы имеем дело и где искать его свойства. Но решение мне кажется некрасивым.
Отсюда вопрос: Есть ли в С++ какие-либо встроенные средства для решения такой задачи ? Что-то сходное с виртуальными методами возможно...