- Ключевое в c++ слово mutable для членов класса. Читать зачем оно нужно здесь;
- Использование для членов класса вместо Foo * foo, конструкции вида ref_prt<foo> foo;
- Ключевое в c++ слово explicit для конструкторов, чтобы запретить неявные преобразования типов. Подробнее тут;
- Технология в c++ placement new. Читать про использование здесь (использование в менеджере памяти), здесь, здесь (использование для буферов) и у Скотта Мейерса (Наиболее эффективное использование с++).
з.з.ы. пост будет подниматься повыше, чтобы быть на виду
ref_ptr статитический объект на стеке,а внутри себя хранит указатель на объект? По моему нам про него даже рассказывали на парах :)
ОтветитьУдалитьDimaD, я тоже сначала так подумал, а оказалось, что это что-то наподобие STLSoft'овской реализации ref_ptr, основанной на подсчёте ссылок. Только вот в дополнение к подсчёту ссылок есть ещё такая штука, как DeleteHandler. То есть, если необходимо удалить объект не сразу, то указатель на него передается DeleteHander'у, который добавляет объекты в список на удаление и удаляет их каждые n фреймов.
ОтветитьУдалитьЕщё не до конца понял зачем это нужно, потому что нет такой штуки, как "вернуть объект". Принцип: вместо того, чтобы делать delete, мы помечаем объект как удаленный, а затем, если нам понадобился объект такого же типа, мы вместо new получаем указатель на "удаленный" объект и снимаем у него флаг удаленный.
Оптимизируют повсюду? В вебките есть супер оптимизация на хранение строк. У них все строки в программе хранятся в единственном экземляре, а там, где они одинаковы, просто указатели. Чтобы дерево разбора меньше памяти ело
ОтветитьУдалитьПро строки и их оптимизацию хорошо написал IronPeter вот тут, пост №7.
ОтветитьУдалить