【问题标题】:Re-writing this smart pointer重写这个智能指针
【发布时间】:2013-01-19 13:11:59
【问题描述】:

我正在将一些代码从 ACE 转移到 Poco。我是多线程设计的新手,所以我有点困惑!

typedef Arc::AutoPtr<ResultSet, ACE_Thread_Mutex> QueryResult;

我不能像这样重写它,因为 Poco::AutoPtr 只接受一个参数作为类模板

typedef Poco::AutoPtr<ResultSet, Poco::Mutex> QueryResult;

我应该怎么写?

【问题讨论】:

    标签: c++ smart-pointers ace poco-libraries


    【解决方案1】:

    我不确定Arc::AutoPtr 是什么,因为我在 ACE 文档中找不到类似的内容。但是,如果它与 ACE_Refcounted_Auto_Ptr 相同,那么 Poco 对应的 typedef 可能是 typedef Poco::SharedPtr&lt;ResultSet&gt; QueryResult;。但是从文档中不清楚 Poco 中的 SharedPtr 是否实现了线程安全的引用计数,所以你必须小心。

    Poco::AutoPtr实际上是一个侵入式智能指针,需要指向类型的支持(类似于boost::intrusive_ptr)。

    【讨论】:

    • Poco::SharedPtr 确实提供了线程安全的引用计数。默认 ReferenceCounter 使用 AtomicCounter,它通过特定于平台的原子原语提供线程安全,或者,如果这些原子原语不可用,则使用 FastMutex。用户还可以提供他们的参考计数器:模板 > class SharedPtr { /*...*/ }
    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多