У меня есть список умных указателей. Я хочу, чтобы некоторые из этих интеллектуальных указателей действовали как обычные указатели, то есть они просто являются ссылкой на экземпляр и не участвуют в его освобождении. Например, они могут указывать на экземпляры, размещенные в стеке. Остальные интеллектуальные указатели в списке должны действовать как обычный boost :: shared_ptr.
Вот как может выглядеть класс:
template<class T> smart_ptr {
private:
T *p;
boost::shared_ptr<T> sp;
public:
smart_ptr(T *p): p(p), shared(0) { } // p will not be deleted
smart_ptr(boost::shared_ptr<T> &sp): p(sp.get()), sp(sp) { }
T *get() const { return p; }
}
Если есть класс повышения, который делает это, я бы предпочел использовать его вместо того, чтобы писать класс самостоятельно. Оказывается, их нет, или я ошибаюсь?