2015-10-15 117 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

相关问题