История изменений
Исправление const86, (текущая версия) :
У меня как-то возникало подобное желание. Не помню точно, вроде, так даже не скомпилится (а если вдруг и скомпилится, то легче не будет). После размышлений о смысле жизни я пришёл к следующим выводам:
- наследовать enable_shared_from_this должен «финальный» класс или, на худой конец, последний в цепочке наследования, которому нужен shared_from_this();
- надо избегать ситуации, когда в базовом классе нужен shared_from_this(), а если всё-таки настигло, то можно использовать костыли, например:
- переделать нехорошие методы базового класса в статические, принимающие shared_ptr на себя;
- сделать в базовом классе метод и, по вкусу, ещё один такой же с const.
private: virtual shared_ptr<Base> selfBase() = 0;
С нетерпением жду более красивого решения от ниже отписавшихся.
Исходная версия const86, :
У меня как-то возникало подобное желание. Не помню точно, вроде, так даже не скомпилится. После размышлений о смысле жизни я пришёл к следующим выводам:
- наследовать enable_shared_from_this должен «финальный класс» или, на худой конец, последний в цепочке наследования, которому нужен shared_from_this();
- надо избегать ситуации, когда в базовом классе нужен shared_from_this(), а если всё-таки настигло, то можно использовать костыли, например:
- переделать нехорошие методы базового класса в статические, принимающие shared_ptr на себя;
- сделать в базовом классе метод и, по вкусу, ещё один такой же с const.
private: virtual shared_ptr<Base> selfBase() = 0;
С нетерпением жду более красивого решения от ниже отписавшихся.