首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCache和QSharedPointer

QCache和QSharedPointer
EN

Stack Overflow用户
提问于 2015-10-22 12:00:35
回答 1查看 1K关注 0票数 4

问题是,我有一个QVector of QSharedPointer,我想把其中的一部分放到我的QCache中。如何插入指向QCache的共享指针?如果我将指针设置为缓存,但销毁了QVector和其中的共享指针,会发生什么情况?会不会释放内存,而我的缓存指向任何地方?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 14:17:47

如果只放置指向QChache的项的指针,同时由QSharedPointer管理该指针,则这是一个错误。项目对象可以由QSharedPointer析构函数销毁,因此QChache将具有无效指针。这是一个一般的问题,您不能有一个指针的不同所有者不认识对方。如果您通过QSharedPointer<Item>管理指针,那么QChache不应该直接使用Item --应该只使用QSharedPointer<Item>,例如:

代码语言:javascript
复制
// wrong
QCache<int, Item> cache;
QVector<QSharedPointer<Item> > vec;
Item *item = new Item;
vec.push_back(QSharedPointer<Item>(item));
cache.insert(1, item);
// or
cache.insert(1, vec.at(0).data());

// also wrong
QCache<int, <QSharedPointer<Item> > cache;
vec.push_back(QSharedPointer<Item>(item));
cache.insert(1, new QSharedPointer<Item>(item));
// here two different instances of QSharedPointer are initialized
// by the same pointer 'item'

// correct
QCache<int, <QSharedPointer<Item> > cache;
cache.insert(1, new QSharedPointer<Item>(vec.at(0)));

因此,QCache应该有自己的动态分配的QSharedPointer对象的副本,并且已经拥有Item实例所有权的其他QSharedPointer应该正确地初始化QSharedPointer对象。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33280524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档