Tôi đang cố gắng sắp xếp các đối tượng bằng cách sử dụng std::shared_ptr
và std::weak_ptr
. Kịch bản giống như sau:shared_ptr & weak_ptr chuyển đổi
Tôi có các đối tượng thuộc lớp channel
được bắt nguồn từ lớp trừu tượng abstract::channel
(với các hàm ảo thuần túy). Tôi có một vùng chứa channelContainer
(std::vector
) có chứa các con trỏ được chia sẻ (std::shared_ptr
) đến channel
Đối tượng.
Bây giờ, tôi có deque (std::deque)
chứa các con trỏ yếu (std::weak_ptr)
cho mỗi đối tượng trong số channelContainer
. Cho phép đặt tên cho deque này freeChannelQueue
.
Vì vậy, cho phép nói rằng: 'Làm thế nào để chuyển đổi một tham chiếu đến một đối tượng để một con trỏ yếu'
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'
}
tôi đặc biệt quan tâm đến
AFAIK bạn không thể khởi tạo/xây dựng một 'weak_ptr' từ một đối tượng hoặc tham chiếu đối tượng trực tiếp vì đối tượng mà nó tham chiếu phải được sở hữu bởi' shared_ptr'. Do đó bạn cần 'shared_ptr' hoặc' weak_ptr' để xây dựng. – Piotr99