У меня есть ситуация, когда мне нужно знать, когда завершен пользователь shared_ptr, то есть когда пользователь наконец выпустил все его копии. Обычно здесь используется только средство удаления, но в этом случае есть небольшая хитрость. Базовый объект уже является shared_ptr!
То есть в псевдокоде:
shared_ptr<T> a( new T );
.
.
.
shared_ptr<T> b( a, bind( delete_func, id ) );
Я порождаю новую ветку своего рода из оригинального shared_ptr. Этот новый shared_ptr b
может быть скопирован и использован как обычный shared_ptr, но delete_func должен быть вызван, когда эта конкретная ветвь завершена. Теперь я не могу просто использовать a.get()
здесь, так как этот новый shared_ptr должен также сохранять базовый объект (это может быть последний shared_ptr для него).
Я ищу способ сделать это без необходимости кардинально менять структуру. Кто-нибудь видит хорошее простое решение?
Я использую библиотеку наддува для интеллектуальных указателей и привязки.