Я видел более ужасные вещи в свое время, вообще не читая.
class A
{
private:
A * non_const_this;
public:
A() : non_const_this( this )
{
}
void changesme(); // non-const
void method() const
{
non_const_this->changesme();
}
};
Приведенный выше код, который я дал, звучит так: «Я нахожусь в неконстантной функции, поэтому я возьму неконстантная ссылка на себя, чтобы я мог изменить объект позже, когда мне нужно, даже когда я нахожусь в константном контексте ".Что на самом деле хуже, чем ваш возможный сценарий (если createObjects () является const), который говорит: «Эта функция является const, потому что она не меняет состояние сейчас, но должна передать неконстантную ссылку на себя, поскольку мое состояние изменитсяпозже ".
Конечно лучше, чем модификатор const, во-первых, был бы разделенный интерфейс (изменяемый интерфейс к объекту происходит от неизменяемого).
Что я смотрювыше отношения один-к-одному между Game и Grid.Grid имеет ссылку на одну игру, а initObjects игры знает об одной Grid.Таким образом, эти два очень тесно связаны.Это не обязательно означает, что они должны быть одним объектом - снова разделенным интерфейсом - вы можете передать Grid & или Game & reference для использования только интерфейса этого класса.
Вызывается ли InitObjects из конструктора?