2015-10-15 3 views
0

Может кто-то дать мне пожалуйста намек на эту ошибку:QCache и станд :: 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

Просто заглянул в API QCache, и поскольку моя догадка верна, я отправлю его как ответ (с надеждой на upvotes!).

Подпись для insert() является bool QCache::insert(const Key & key, T * object, int cost = 1). Более того, API упоминает тот факт, что QCache владеет указателем с этого момента, поэтому вам вообще не нужен shared_ptr. Вместо этого вы должны вставить исходный указатель, который будет управляться QCache.

+0

Спасибо за ответ и помощь. – adapto

+0

Проблема в том, что у меня есть вектор shared_ptr, и я хочу поместить часть их в QCache. Что произойдет, если я установлю указатель на свой кеш, но уничтожу в нем вектор и общий указатель? WIll память будет выпущена, а мой кеш указывает на никуда? – adapto

+0

@adapto, если вы попытаетесь сделать это, у вас будет испорченная программа. У вас не может быть того же указателя, который принадлежит двум менеджерам - QCache и shared_ptr. – SergeyA

Смежные вопросы