为啥支持 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_from
是 enable_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?