elg*_*ino 3 c++ qt pointers dynamic-allocation
我有一个带QString键的QMap和一个指向myclass对象的值指针.但我不知道如何删除一个从QMAP指针,当我动态分配QMAP的价值:
QMap<QString, myClass*> types;
myClass *type = types.value(typeKey);
if (!type) {
type = new myClass;
types.insert(typeKey, type);
Run Code Online (Sandbox Code Playgroud)
如何通过键删除指针?我知道像QMap这样的方法remove.这样安全吗?
以下内容如何:
const QString key = types.key(static_cast<myClass*>());
types.remove(key);
Run Code Online (Sandbox Code Playgroud)
该remove()函数从地图中删除该项,但它不会删除它,因此如果它是指向对象的指针,则必须自己执行.我会用以下方式做到这一点:
myClass *type = types.take("foo");
delete type;
Run Code Online (Sandbox Code Playgroud)
由于 QMap::clear 不删除指针,因此还有另一种方法可以使用 qDeleteAll 函数来执行此操作。qDeleteAll 仅在 QMap 和 QHash 的情况下适用于值,而不适用于键,即使它们是指针类型,因此下面的示例仅适用于 kay-value 容器的值。这个值必须是指针类型。
QMap<int,Employee *> mlist;
mlist.insert(1,new Employee("Blackpool", "Stephen"));
mlist.insert(2,new Employee("Twist", "Oliver"));
qDeleteAll(mlist);
#or you can do it like
qDeleteAll(mlist.begin(),mlist.end());
Run Code Online (Sandbox Code Playgroud)
更新:是的,总是在其后使用clear(),以从映射中删除条目,例如mlist.clear();
| 归档时间: |
|
| 查看次数: |
2828 次 |
| 最近记录: |