Согласно cppreference.com, std::shared_ptr
предоставляет полный набор относительных операторов (==,! =, <,...), но семантика сравнения не указана. Я предполагаю, что они сравнивают базовые необработанные указатели с ссылочными объектами и что std:: weak_ptr и std:: unique_ptr делают то же самое.
В некоторых целях я бы предпочел иметь относительные операторы, которые заказывают интеллектуальные указатели, на основе сравнения ссылочных объектов (а не указателей на них). Это уже кое-что, что я делаю много, но с моими "тупыми указателями", которые ведут себя в основном как raw-указатели, за исключением относительных операторов. Я бы хотел сделать то же самое со стандартными интеллектуальными указателями С++ 11. Так что...
-
Можно ли наследовать от интеллектуальных указателей С++ 11 (shared_ptr, weak_ptr и unique_ptr) и переопределить относительные операторы?
-
Есть ли какие-нибудь скрытые проблемы, которые мне нужно искать? Например, существуют ли какие-либо другие методы, которые мне нужно реализовать или использовать
using
для обеспечения правильной работы? -
Для максимальной лени, есть ли доступный шаблон библиотеки, который сделает это для меня автоматически?
Я надеюсь, что это "конечно, вы можете это сделать, идиот!" но я немного сомневаюсь, потому что в стандартной библиотеке есть несколько классов (например, контейнеры, такие как std::map
), которые вы не должны наследовать.