2012-07-04 51 views
1

雖然存在相當於boost::shared_ptrQSharedPointer),但我無法找到類似boost::shared_array的東西。相當於boost :: shared_array的Qt智能指針?

當然,我可以使用類似的東西

QSharedPointer<const std::vector<T> > shared_vector_ptr(new std::vector<T>(
     reinterpret_cast<T*>(pBuffer), 
     reinterpret_cast<T*>(pBuffer+length) 
));  

,但我想知道如果存在本地 Qt的解決方案,它提供了T& operator[](size_t)並使用delete[]代替delete中。我不願意在這個項目中使用boost,因爲目標機器無法安裝boost並且項目按源代碼分發。

注:我知道我可以用QSharedPointer::QSharedPointer (T * ptr, Deleter deleter)指定缺失者,但我不喜歡的方法,因爲編譯器不會強迫你指定一個刪除器,這將導致由delete刪除的new []分配的塊。

+0

關於這個問題有兩個優秀的帖子:http://stackoverflow.com/questions/5026197/what-c​​-smart-pointer-implementations-are-available和http://stackoverflow.com/questions/7875764/使用-qsharedpointer-with-new-yield-mismatched-free-delete-delete-i – KCiebiera

+0

僅供參考:可否進一步downvotes解釋自己?我對downvotes沒有任何問題,但沒有評論,很難知道你做錯了什麼。 – Zeta

回答

1

我認爲最近的是QScopedArrayPointer,但它當然是有作用的。

這將是一些工作來繼承QSharedPointer靜靜地添加自己的隱藏Deleter調用delete[](並添加operator[]),這樣用戶就不必做任何思考,它仍然使用Qt的本地代碼 - 你已經整齊地包起來了。