|
|
|
Объясните, зачем нужен mutable?
|
|||
|---|---|---|---|
|
#18+
Граждане умные, объясните мне плз, зачем нужен модификатор mutable? Т.е. я знаю, что он нужен в случае если вдруг понадобиться в const-методе изменить переменную класса. Но вот зачем это нужно? Это костыль, или "результат вдумчивого проектирования" (с) Страуструп ? Если можно - от пример из жизни был бы очень кстати... А то есть мнение что нужен он на случай хренового дизайна, и если понадобился mutable - то можно и const с метода убрать :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 16:13:19 |
|
||
|
Объясните, зачем нужен mutable?
|
|||
|---|---|---|---|
|
#18+
AmdeiГраждане умные, объясните мне плз, зачем нужен модификатор mutable? Т.е. я знаю, что он нужен в случае если вдруг понадобиться в const-методе изменить переменную класса. Но вот зачем это нужно? Это костыль, или "результат вдумчивого проектирования" (с) Страуструп ? Если можно - от пример из жизни был бы очень кстати... А то есть мнение что нужен он на случай хренового дизайна, и если понадобился mutable - то можно и const с метода убрать :( Кеширование данных. Допустим у тебя есть метод, мама не горюй, по времени вычисления, который читает данные объекта и выдает некий результат. Потом у тебя свойства объекта меняют, и вычисляют опять этот метод. Но, может быть такая ситуация, что у этого объекта есть несколько использующих его объектов, и случилось, так, что один из объектов запросил этот метод, а после него запросил второй. Данные не менялись, зачем считать по новой? Для этого данные результат вычисления в объекте кешируется в некоторой, допусим переменной и взводиться флаг, что мол - посчитал. Если же свойства объекта будут меняться, то флаг будет сброшен, мол считай заново. Примеры? ну допустим объект-враппер, для обращения к базе данных, которая хрензнаетгде находится. Можно селекты кешировать, пока только они идут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 16:24:27 |
|
||
|
Объясните, зачем нужен mutable?
|
|||
|---|---|---|---|
|
#18+
у Майрса есть правило к этой теме, по поводу логически-константных методов (в противоположность побайтово-константным) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 16:34:13 |
|
||
|
Объясните, зачем нужен mutable?
|
|||
|---|---|---|---|
|
#18+
Amdei пишет: > Граждане умные, объясните мне плз, зачем нужен модификатор mutable? > Т.е. я знаю, что он нужен в случае если вдруг понадобиться в > const-методе изменить переменную класса. > > Но вот зачем это нужно? Это костыль, или "результат вдумчивого > проектирования" (с) Страуструп ? Это не костыль, если не клинический случай. Вполне возможно например наличие в классе каких-то данных, которые связаны сугубо с реализацией класса и не являются непосредственно данными, которые служат для реализации функциональности этого класса. Или не являются таковыми с точки зрения пользователя (клиента) класса. Например, некие performance counter-ы, требуемые для замеров производительности. Они могут меняться в даже константном методе. Ничего плохого в этом нет. Но делать только из-за них метод не-const просто неправильно. Другой пример - наличие внутри класса какаой-то структуры, которую нужно maintain-ить. Например, дерева, которое надо балансировать. Возможно делать это на чтении не очень хорошо, но у разработчиков могут быть другие соображения, например, то, что при этом maintenance перераспределиться память и ссылки, возвращаемые из метода, будут невалидны после него. А если провести это во время чтения, можно вернуть уже ссылку на новую память. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 12:21:33 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2027957]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
299ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 599ms |

| 0 / 0 |
