C++ Qt std::unique_ptr Qt 版本在哪里?
Posted
技术标签:
【中文标题】C++ Qt std::unique_ptr Qt 版本在哪里?【英文标题】:C++ Qt where's the std::unique_ptr Qt version? 【发布时间】: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 的观点,我认为一致性提高了可读性,这对于维护代码很重要。因此,如果您在整个代码中使用QSharedPointer
和QVector
和QMap
等,如果您可以改用QScopedPointer
,则抛出一个std::unique_ptr
可能会让读者失望。
我觉得这忽略了为什么 QT 容器继续存在并且没有被 STL 淘汰的重点。基于 QT 的对象无法复制或移动,因为它们的操作符被设计删除,因此它们需要专门的容器。这部分是为了确保以 QObject 为目标的信号和槽仍然可以工作,但是,限制使得一些容器不太理想。我认为你应该为工作使用正确的类或结构,而不是仅仅为了统一而统一。
【参考方案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>
。以上是关于C++ Qt std::unique_ptr Qt 版本在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器
C++ 使用带有基类的已删除函数 std::unique_ptr