【问题标题】:Boost::IntrusiveList with Shared PointersBoost::Intrusive List with Shared Pointers
【发布时间】:2015-02-09 22:17:51
【问题描述】:
所以我正在使用 FastDelegate 和 boost 库编写一个事件处理系统。我需要为监听器设置一个指向事件数据的共享指针队列以及一个 FastDelegate> 列表。那么问题来了。
侵入式列表和队列不允许 shared_ptr 甚至是常量引用,这会使我的代码导致编译时错误。反正我能做到吗?
将共享 ptr 交给代表似乎是最安全的,这样事件就会一直存在,直到每个人都真正完成它为止。
【问题讨论】:
标签:
c++
boost
event-handling
shared-ptr
intrusive-containers
【解决方案1】:
Q.侵入式列表和队列不允许 shared_ptr
没问题:
Live On Coliru
#include <boost/intrusive/list.hpp>
#include <boost/shared_ptr.hpp>
struct Event {};
struct Node : boost::intrusive::list_base_hook<> {
boost::shared_ptr<Event> event { new Event };
};
typedef boost::intrusive::list<Node> event_list;
int main() {
std::vector<Node> nodes(10);
event_list pending;
pending.push_back(nodes[3]);
pending.push_back(nodes[7]);
}
从您期望 (?) intrusive::list<T> 为 T = shared_ptr<...> 工作这一事实告诉我,您想要一个简单的 std::list(或只是一个 std::vector)。
甚至是常量引用
持续引用也没有问题。你想使用shared_ptr<const Event>吗?因为如果您要与多方分享活动,这是一个不错的选择。