2013-01-19 103 views
1

Im将一些代码从ACE传递到Poco。我是多线程设计的新手,所以它只是让我感到困惑!重写这个智能指针

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

林不能够只是将其重新写这样的,因为波科:: AutoPtr只接受一个参数作为类模板

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

我应该怎么写呢?

回答

0

我不确定Arc::AutoPtr是什么,因为我在ACE文档中找不到那样的东西。但是,如果它与ACE_Refcounted_Auto_Ptr相同,那么相应的Poco typedef可能是typedef Poco::SharedPtr<ResultSet> QueryResult;。但是从文档中不清楚Poco中的SharedPtr是否实现了线程安全引用计数,因此您必须小心。

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

+0

Poco :: SharedPtr提供线程安全引用计数。默认的ReferenceCounter使用AtomicCounter,它通过特定于平台的原子基元提供线程安全性,或者如果不可用,则提供FastMutex。用户还可以提供其参考计数器: template > class SharedPtr {/*...*/} – Alex