【问题标题】:QCache and std::shared_ptrQCache 和 std::shared_ptr
【发布时间】:2015-10-15 20:26:53
【问题描述】:

谁能给我这个错误的提示:

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);

感谢您的帮助。

【问题讨论】:

  • 从错误看来,QCache 想要一个指向其存储类型的指针,而不是类型本身。
  • 谢谢。它现在作为参考编译:cache.insert(23, &foo); ...但我不确定智能指针是否计入此引用。
  • 坏主意。会导致崩溃。检查我的更新。

标签: c++ qt c++11 smart-pointers


【解决方案1】:

刚刚查看了 QCache API,由于我的猜测是正确的,因此我将其作为答案发布(希望得到支持!)。

insert() 的签名是 bool QCache::insert(const Key &amp; key, T * object, int cost = 1)。此外,API 提到 QCache 从那一刻起就拥有指针这一事实,因此您根本不需要 shared_ptr 。相反,您应该插入将由 QCache 管理的原始指针。

【讨论】:

  • 感谢您的回答和帮助。
  • 问题是,我有一个 shared_ptr 向量,我想将它们的一部分放到我的 QCache 中。如果我将指针设置为我的缓存但破坏了向量和其中的共享指针,会发生什么?内存会被释放,我的缓存会不会指向任何地方?
  • @adapto,如果您尝试这样做,您的程序将会损坏。两个管理器不能拥有相同的指针 - QCache 和 shared_ptr。
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 2013-04-16
  • 2014-01-03
  • 1970-01-01
  • 2012-09-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多