Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, c-smile, Вы писали:
...
CS>Есть такой вариант:
CS>CS>static handler* pA = new handler_A();
CS>static handler* pB = new handler_B();
CS>class element
CS>{
CS> handler* ph;
CS> void layout_width(...) { ph->do_layout_width(this, ...); }
CS> void layout_height(...) { ph->do_layout_height(this, ...); }
CS> void specialize(type) {
CS> switch(type) {
CS> case tA : ph = pA; break;
CS> case tB : ph = pB; break; }
CS> }
CS>};
CS>
CS>Функционально вышесказанное есть:
CS>CS>class element
CS>{
CS> void layout_width(...) {}
CS> void layout_height(...) {}
CS> void specialize(type) {
CS> switch(type) {
CS> turn_to<elementA>(this); break;
CS> turn_to<elementB>(this); break; }
CS> }
CS>};
CS>class elementA:element
CS>{
CS> void layout_width(...) {...} // имплементация/специализация
CS> void layout_height(...) {...} // имплементация/специализация
CS>};
CS>class elementB:element
CS>{
CS> void layout_width(...) {...} // имплементация/специализация
CS> void layout_height(...) {...} // имплементация/специализация
CS>};
CS>
CS>Что мы получаем в этом случае:
CS>1) нет поля handler* ph; меньше памяти нужно на instance
CS>2) нет дополнительной косвенности вызова.
CS>3) количество параметров вызова требуемое ph->do_layout_*** меньше на единицу...
CS>Поле handler* ph; в первом примере дублирует функционально VTBL в виде самописного лисапета.
CS>А собственно зачем его дублировать когда оно есть и так?
...
Вам стоит дописать в кодстайл запрет на использование ссылок в "элементах".
Пруф Вкратце есть огромная серая зона в стандарте, которая напрочь игнорирует существующие техники. Даже если бы вы удаляли элемент и создавали нового типа, но выделение дергали из пула то компилятор может не перепривязать ссылку. Что можно сказать ? Стандарты писать тяжело наверное и ошибки на том уровне ловить тем более.