Как обработать указатель this в конструкторе?

У меня есть объекты, которые создают другие дочерние объекты внутри своих конструкторов, передавая «this», чтобы ребенок мог сохранить указатель на своего родителя. Я широко использую boost :: shared_ptr в своем программировании как более безопасную альтернативу std :: auto_ptr или необработанным указателям. Таким образом, ребенок будет иметь такой код, какshared_ptr<Parent>и повышение обеспечиваетshared_from_this() метод, который родитель может дать ребенку.

Моя проблема в том чтоshared_from_this() не может использоваться в конструкторе, что на самом деле не является преступлением, потому что «это» не должно использоваться в конструкторе в любом случае, если вы не знаете, что делаете, и не обращаете внимания на ограничения.

Руководство по стилю Google C ++состояния что конструкторы должны просто устанавливать переменные-члены в их начальные значения. Любая сложная инициализация должна идти в явном методе Init (). Это решает проблему «это в конструкторе», а также некоторые другие.

Что беспокоит меня, так это то, что люди, использующие ваш код, должны помнить, что нужно вызывать Init () каждый раз, когда они создают один из ваших объектов. Единственный способ, которым я могу придумать, это обеспечить утверждение, что Init () уже был вызван в начале каждой функции-члена, но это утомительно писать и громоздко выполнять.

Существуют ли идиомы, которые решают эту проблему на любом этапе?

Ответы на вопрос(6)

Ваш ответ на вопрос