При перегрузке = возможно ли изменить правый операнд если он передан по константной ссылке
Почему допускается изменить правый операнд в оператора равно, то есть работает это: ++*h.use; Правый операнд является константной ссылкой и не может использовать модифицирующие операторы типа ++.
H& H::operator=(const H& h) {
++*h.use;
if (--*use == 0) {
delete ps;
delete use;
}
ps = h.ps;
i = h.i;
use = h.use;
return *this;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Здесь вы никак не меняете сам объект h, а меняете значение, на которое указывает его член-указатель use. Оператор инкремента применяется к разыменованному указателю *h.use.
Вот если бы объявили use как указатель на константное значение — тогда дело другое. Сейчас же константность h не под угрозой :)