为啥支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr?

Posted

技术标签:

【中文标题】为啥支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr?【英文标题】:Why do I need Boost.SmartPtr for the C++ compiler that supports C++11 and later?为什么支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr? 【发布时间】:2022-01-03 15:02:39 【问题描述】:

boost C++ 库是一个著名的沙箱,用于存储标准 C++ 的每个新版本所吸收的语言和标准库功能。然而,最终成为标准一部分的升压组件仍然存在于升压中。上述的经典示例之一是智能指针。那么为什么支持 C++11 及更高版本的 C++ 编译器需要Boost.SmartPtr

【问题讨论】:

人们在生产代码中使用 Boost,因此保持兼容性是(Boost 的)目标。 即使被吸收的东西仍然在 boost 中继续发展(标准不允许如此迅速地发生)。例如,boost::enable_shared_fromenable_shared_from_this 的类型擦除替代方案。 @RichardCritten 这是一个很好的观点,我同意。 @StoryTeller-UnslanderMonica 这是很有价值的一点!也想过但没有好的例子 同样有趣的是更普遍的问题***.com/questions/8851670/… 【参考方案1】:

为什么支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr?

因为:

    您可能需要使用另一个不支持 C++11 或更高版本的编译器来编译您的程序。 您可能不想自己实现make_unique。当然这很容易,但既然可以使用现有的实现,为什么还要这样做呢? 除了共享指针之外,您可能还想使用 Boost.SmartPtr 提供的智能指针之一。 您可能已经在使用它,并且不想为停止使用它付出代价。

【讨论】:

仅供未来读者参考make_unique从C++14开始用标准C++实现 @eeroika 你能提供#3的例子吗? @nickolay 查看 Boost.SmartPtr 文档中的智能指针列表。 谢谢,我明白了。只是以为您的指尖上有一个真实世界的例子。这样的例子总是在教人!

以上是关于为啥支持 C++11 及更高版本的 C++ 编译器需要 Boost.SmartPtr?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到错误消息:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本

在 C++11 及更高版本中,std::string::operator[] 是不是进行边界检查?

c++11 及更高版本中 mutex.lock() 和 .unlock() 的确切线程间重新排序约束是啥?

Kotlin 编译“错误:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.0 及更高版本。”但 build.gradle 中没有 kotlin_version?

Sun C++ 编译器和 Boost

为啥 iPhone 6 及更高版本的 wkwebview 不接受底部的点击?