【问题标题】:Delete QMap value as a pointer删除 QMap 值作为指针
【发布时间】:2013-11-12 17:31:15
【问题描述】:

我有一个QMap,键为QStringmyClass。我查看了 Qt 文档并决定将 value 定义为指向 myClass 对象的指针。但是,我对如何remove 键和(由 new 运算符分配的指针对象)值的问题感到困惑?如果我使用 remove() 方法,在动态分配对象的内存释放方面是否安全?

这是一个不错的选择吗?

myClass *type = types.take("foo");
delete type;

【问题讨论】:

  • 不,这不会删除您的 myClass 实例并且会导致内存泄漏
  • 您应该使用 Qt 智能指针之一,它将为您调用 delete。每次需要时,即使发生异常。

标签: c++ qt pointers memory-management dynamic-allocation


【解决方案1】:

正如 Qt 文档所说的 QMap::take() 函数

从 map 中移除带有 key 键的项目并返回与之关联的值。

这样您的代码将从映射中删除键并删除为 myClass 对象分配的内存。

【讨论】:

  • 键,作为一个值存储,一旦执行超出范围,就会被销毁。
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多