История изменений
Исправление KivApple, (текущая версия) :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в плюсах.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this), сулит лютую боль тоже.
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна (разве что не забудь использовать атомики для счетчиков ссылок, если нужна потокобезопасность). И вообще, если какой-то объект всегда используется с подсчётом ссылок, то лучше сделать что-то типа boost::intrusive_ptr и хранить счётчик в самом объекте. shared_ptr слишком обобщенный и неоптимальный из-за двух указателей вместо одного.
Если прям ну очень хочешь унаследоваться, наследуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в плюсах.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this), сулит лютую боль тоже.
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна (разве что не забудь использовать атомики для счетчиков ссылок, если нужна потокобезопасность).
Если прям ну очень хочешь унаследоваться, наследуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в плюсах.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this), сулит лютую боль тоже.
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна (разве что не забудь использовать атомики для счетчика ссылок, если нужна потокобезопасность).
Если прям ну очень хочешь унаследоваться, насладуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в плюсах.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this), сулит лютую боль тоже.
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна.
Если прям ну очень хочешь унаследоваться, насладуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в плюсах.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this).
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна.
Если прям ну очень хочешь унаследоваться, насладуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли. И является антипаттерном далеко не только в Си.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this).
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна.
Если прям ну очень хочешь унаследоваться, насладуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исправление KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this).
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна.
Если прям ну очень хочешь унаследоваться, насладуйся через private, а потом делай отдельные методы public через using. Это такое себе, но хотя бы будет работать как ты хочешь.
Исходная версия KivApple, :
Наследование с уменьшением функционала родителя, а не расширением обычно работает через жопу и дикие костыли.
Наследование от классов, авторы которых не предполагали что от них будут наследоваться (большинство классов из STL не предназначены для наследования, кроме тех у которых явно в документации написано, что от них можно и нужно наследоваться, как например, std::enable_shared_from_this).
Тебе нужно использовать композицию вместо наследования, написав обёртку над shared_ptr не пробрасывая наружу методы, которые не должны быть доступны юзеру. Либо ты должен написать свою реализацию shared_ptr, там не rocket science, тем более без поддержки weak указателей реализация совсем тривиальна.