Ich versuche Objekte mit std::shared_ptr
und std::weak_ptr
zu jonglieren. Das Szenario ist ungefähr so:shared_ptr & weak_ptr Konvertierungen
Ich habe Objekte der Klasse channel
, die von einer abstrakten Klasse abstract::channel
(mit reinen virtuellen Funktionen) abgeleitet ist. Ich habe einen Container channelContainer
(std::vector
) mit geteilten Zeigern (std::shared_ptr
) zu channel
Objekte.
Jetzt habe ich eine deque (std::deque)
mit schwachen Zeigern (std::weak_ptr)
zu jedem Objekt in der channelContainer
. Benennen Sie diese Deque freeChannelQueue
.
kann also sagen: ‚Wie eine Referenz auf ein Objekt auf einen schwachen Zeiger konvertieren‘
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'
}
Ich interessiere mich besonders für die
AFAIK Sie können ein 'weak_ptr' nicht direkt von einem Objekt oder einer Objektreferenz initialisieren/konstruieren, da das Objekt, auf das es verweist, im Besitz von' shared_ptr' sein muss. Daher benötigen Sie für die Konstruktion ein 'shared_ptr' oder' weak_ptr'. – Piotr99