【问题标题】: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&lt;T&gt;T = shared_ptr&lt;...&gt; 工作这一事实告诉我,您想要一个简单的 std::list(或只是一个 std::vector)。

    甚至是常量引用

    持续引用也没有问题。你想使用shared_ptr&lt;const Event&gt;吗?因为如果您要与多方分享活动,这是一个不错的选择。

    【讨论】:

    • 这太棒了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多