【问题标题】:C++ Qt where's the std::unique_ptr Qt version?C++ Qt std::unique_ptr Qt 版本在哪里?
【发布时间】:2014-11-05 08:42:56
【问题描述】:

所以在 Qt 中编程时,我喜欢尽可能使用 Qt 实现。 据我所知,std::unique_ptr 没有 Qt 版本,还是有?

如果 Qt 不存在,那么在 Qt 中产生“相同”结果的替代方案是什么?

【问题讨论】:

  • 你为什么特别想要一个Qt版本?您是否尝试在没有标准库的情况下编写 C++?
  • @MikeSeymour 并不特别,但是当 Qt 实现涵盖所有内容时,不需要将 std 与 Qt 混合使用 :)
  • @deW1 :这不是它的工作原理,STL 是您每次解决问题时都应该使用的东西。它写得很好,任何其他库都不能像 STL 那样有效。我建议您仅将 Qt 实现用于 STL 中没有解决方案的事物。
  • 为了反驳关于使用标准库/STL 的观点,我认为一致性提高了可读性,这对于维护代码很重要。因此,如果您在整个代码中使用QSharedPointerQVectorQMap 等,如果您可以改用QScopedPointer,则抛出一个std::unique_ptr 可能会让读者失望。
  • 我觉得这忽略了为什么 QT 容器继续存在并且没有被 STL 淘汰的重点。基于 QT 的对象无法复制或移动,因为它们的操作符被设计删除,因此它们需要专门的容器。这部分是为了确保以 QObject 为目标的信号和槽仍然可以工作,但是,限制使得一些容器不太理想。我认为你应该为工作使用正确的类或结构,而不是仅仅为了统一而统一。

标签: c++ qt qt5


【解决方案1】:

std::unique_ptr 等效的Qt 是QScopedPointer

由于不支持移动语义,它的用处明显减少,使其更接近 C++03 std::auto_ptr (Why is auto_ptr being deprecated?) 的实用性。

【讨论】:

  • QScopedPointer 不像auto_ptr 那样坏了,是吗?它不转移复制和分配的所有权,它只是不支持复制和分配。 (afact,阅读文档)
  • @Benjamin Lindley 确实,它根本没有复制构造函数,甚至没有非常量构造函数。
  • TBH 它确实有自定义删除器,而 auto_ptr 没有。
  • QScopedPointer<T> 可能更接近于const std::unique_ptr<T>
猜你喜欢
  • 2020-04-25
  • 2016-05-31
  • 1970-01-01
  • 2020-11-15
  • 2014-05-04
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多