Написание текстур с использованием ядра

Одной из причин «необходимости» для неизменяемых классов является комбинация передачи всего по ссылке и отсутствие поддержки просмотра только для чтения объекта (например, C ++ const).

Рассмотрим простой случай класса, имеющего поддержку шаблона наблюдателя:

class Person {
    public string getName() { ... }
    public void registerForNameChange(NameChangedObserver o) { ... }
}

Если string не были неизменяемы, для класса Person было бы невозможно реализовать registerForNameChange() правильно, потому что

void foo(Person p) {
    p.getName().prepend("Mr. ");
}

В C ++ getName(), возвращающий const std::string&, имеет эффект возврата по ссылке и предотвращения доступа к мутаторам, подразумевая, что в этом контексте необязательные классы не нужны.

4
задан Ruban4Axis 23 January 2019 в 11:53
поделиться