Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr_C++_Qt_Boost_Stl_Smart Pointers - Fatal编程技术网

C++ QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr

C++ QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr,c++,qt,boost,stl,smart-pointers,C++,Qt,Boost,Stl,Smart Pointers,这三个分别是来自Qt、STL和Boost的共享指针类。它们在功能上似乎完全相同,所以我很困惑: 它们各自的优点和缺点是什么 为什么Boost和Qt版本会存在?它已经存在于STL中了,为什么要自己制作呢 我应该如何选择使用哪一个 QSharedPointer需要Qt,共享\u ptr是标准且可移植的 std::shared_ptr是boost::shared_ptr的标准替代品(也就是说,boost首先出现并成为标准) 除非您有需要QSharedPointer的Qt类,否则不要使用QSharedP

这三个分别是来自Qt、STL和Boost的共享指针类。它们在功能上似乎完全相同,所以我很困惑:

  • 它们各自的优点和缺点是什么
  • 为什么Boost和Qt版本会存在?它已经存在于STL中了,为什么要自己制作呢
  • 我应该如何选择使用哪一个
  • QSharedPointer需要Qt,
    共享\u ptr
    是标准且可移植的
  • std::shared_ptr
    boost::shared_ptr
    的标准替代品(也就是说,boost首先出现并成为标准)
  • 除非您有需要QSharedPointer的Qt类,否则不要使用QSharedPointer。如果有tr1或C++0x实现,请使用
    std::shared_ptr
    ,否则使用
    boost::shared_ptr

  • 寻找你问题的答案。

    它不是“已经在STL中”。TR1基于Boost的共享ptr。我不知道Qt。因为我不熟悉Qt,这不保证有答案,但是。。。1.除非您知道STL版本有影响您的bug,否则请始终选择STL版本。2.boost版本比其他版本早了几年,STL版本完全基于boost版本。3.看#1.我不认为这回答了他的任何问题,似乎我是唯一一个没有对每一个问题进行长期历史讨论的人。这简要地陈述了当前的事态。尽管如此,请随意不同意任何一点。哦,这是正确的,我同意,经过再三考虑,我认为它部分地回答了问题,我可能有点反应过度,但那是因为我想看到一些对我来说特别重要的事情。谢谢你的回答。特别是对于#2,它解决了Boost VS STL部分。但是:1。事实上,我到处都在使用Qt,这就是为什么我首先要问这个问题(很抱歉上面没有提到)。此外,Qt也是可移植的。3.为什么?我确实有Qt类,它们不需要它,但为了一致性,我不愿意将STL内容混合到Qt代码中(因为Qt提供了几乎所有内容的自己版本),不要害怕混合。标准就是标准,永远都在那里工作。QT在许多平台上可用,但几乎没有标准C++的那么多。然而,现在这对你来说可能不是问题。使用标准代码也会减少新手对代码的学习。如果你只使用Qt,而不使用标准,没有Qt经验的人将面临巨大的障碍需要克服。谢谢,这是我想要的非常全面的比较。