2013-01-19 39 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