shared_ptr & amp; conversions weak_ptr

Je suis en train de jongler avec des objets à l'aide std::shared_ptr et std::weak_ptr. Le scénario est quelque chose comme ceci:

J'ai objets de la classe channel qui est dérivée d'une classe abstraite abstract::channel (avec des fonctions virtuelles pures). J'ai un conteneur channelContainer (std::vector) contenant des pointeurs partagés (std::shared_ptr) à channel Objets.

Maintenant, j'ai un deque (std::deque) contenant des pointeurs faibles (std::weak_ptr) pour chaque objet dans le channelContainer. Permet de nommer cette deque freeChannelQueue.

Donc permet de dire:

std::vector<std::shared_ptr<abstract::channel> > channelContainer;
std::deque<std::weak_ptr<abstract::channel > > freeChannelQueue;

//Assuming that both the containers are filled appropriately How do I go about implementeing the below functions?

abstract::channel& get_free_channel() {
  //This should return a free channel object from 'freeChannelQueue' and pop the queue.
}

bool release_channel(abstract::channel& ch) {
 //This should convert 'ch' to a std::weak_ptr (or std::shared_ptr) and push it to   'freeChannelQueue'
}

Je suis particulièrement intéressé par le 'Comment faire pour convertir une référence à un objet à une faible pointeur?'

source d'informationauteur user2559933