Boost::IntrusiveList 与共享指针
Boost::IntrusiveList with Shared Pointers
所以我正在使用 FastDelegate<> 和 boost 库编写一个事件处理系统。我需要设置一个指向事件数据的共享指针队列以及一个 FastDelegate> 列表供听众使用。那么问题来了。
侵入式列表和队列不允许 shared_ptr 甚至常量引用,这使得我的代码导致编译时错误。不管怎样,我能做到吗?
将共享 ptr 传递给代表似乎是最安全的方式,这样事件就会一直存在,直到每个人都真正完成它。
Q. Intrusive list and queue don't allow shared_ptr
没问题:
#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
) .
or even constant references
常量引用也没有问题。您要使用 shared_ptr<const Event>
吗?因为如果您要与多方共享活动,这是一个不错的选择。
所以我正在使用 FastDelegate<> 和 boost 库编写一个事件处理系统。我需要设置一个指向事件数据的共享指针队列以及一个 FastDelegate> 列表供听众使用。那么问题来了。
侵入式列表和队列不允许 shared_ptr 甚至常量引用,这使得我的代码导致编译时错误。不管怎样,我能做到吗?
将共享 ptr 传递给代表似乎是最安全的方式,这样事件就会一直存在,直到每个人都真正完成它。
Q. Intrusive list and queue don't allow shared_ptr
没问题:
#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
) .
or even constant references
常量引用也没有问题。您要使用 shared_ptr<const Event>
吗?因为如果您要与多方共享活动,这是一个不错的选择。