2015-10-15 150 views
0

能有人給我請一個提示這個錯誤:QCache和std :: shared_ptr的

no viable conversion from 'std::shared_ptr<Foo>' to 'std::__1::shared_ptr<Foo> *' 

的QCache看起來是這樣的:

QCache<int, std::shared_ptr<Foo>> cache; 

我嘗試插入這樣的元素:

std::shared_ptr<Foo> foo; 
cache.insert(23, foo); 

感謝您的幫助。

+0

從錯誤看來'QCache'想要一個指向它的存儲類型的指針,而不是類型本身。 – SergeyA

+0

謝謝。它現在編譯爲一個參考:cache.insert(23,&foo); ...但我不確定智能指針是否計算此引用。 – adapto

+0

壞主意。將導致崩潰。請檢查我的更新。 – SergeyA

回答

3

剛剛查看了QCache API,並且由於我的猜測是正確的,所以我會將其作爲答案發布(希望爲upvotes!)。

insert()的簽名是bool QCache::insert(const Key & key, T * object, int cost = 1)。而且,API提到了QCache擁有這個指針的事實,所以根本不需要shared_ptr。相反,您應該插入將由QCache管理的原始指針。

+0

感謝您的答案和幫助 – adapto

+0

問題是,我有一個shared_ptr矢量,我想把它們的一部分放到我的QCache中。如果我將指針設置到緩存但是銷燬矢量和共享指針會發生什麼?內存被釋放,我的緩存指向無處? – adapto

+0

@adapto,如果你嘗試這樣做,你將會有一個損壞的程序。你不能擁有兩個管理員擁有的同一個指針 - QCache和shared_ptr。 – SergeyA

相關問題