Привет, нужна помощь зала. Захотел хотелку из названия темы, подумал, что нужно отнаследоваться от std’шного и удалить operator weak_ptr
#include <memory>
using namespace std;
template <typename T>
class Shared_ptr_without_weak : public std::shared_ptr<T> {
public:
using std::shared_ptr<T>::shared_ptr;
operator std::weak_ptr<T>() = delete;
};
int main() {
Shared_ptr_without_weak<int> s(new int());
weak_ptr w0(s); // error: use of deleted function
weak_ptr<int> w1;
w1 = s; // ok
}
Результат заставил задуматься, почему в случае с конструктором задумка работает (ошибка компиляции), а с оператором= нет? В обоих случаях (ctr, operator=) shared_ptr принимается в шаблонную функцию, а версия с weak_ptr - обычная функция, нешаблонная, по идее должна иметь более высокий приоритет, но увы, во втором случае что-то идет не так.