Ala*_*ing 66 c++ boost stl shared-ptr c++11
我想在GCC中启用对C++ 0x的支持-std=c++0x.我并不一定需要GCC 4.5中的任何当前支持的C++ 11功能(很快就会有4.6),但我想开始习惯它们.例如,在我使用迭代器的一些地方,auto类型会很有用.
但同样,我不需要任何当前支持的功能.这里的目标是鼓励我将新标准的特征融入我的编程"词汇"中.
根据您对C++ 11支持的了解,在GCC中启用它是一个好主意,然后通过例如从使用切换boost::shared_ptr到std::shared_ptr专用来实现它,因为两者不混合?
PS:我知道这个比较不同口味的好问题,shared_ptr但是我要求在标准最终确定之前提出更高级别的建议.另一种说法是,当像GCC这样的编译器说它支持"实验性功能"时,这是否意味着我可能会在编译过程中遇到奇怪的错误,这些错误将成为主要的时间汇,并且是StackOverflow上一个神秘问题的来源?
编辑:我决定退回,std::shared_ptr因为我只是不相信它在GCC 4.5中的支持,如本问题中的示例所示.
Bil*_*eal 58
有几个原因可以切换到std::shared_ptr:
std::shared_ptr并直接显示指向对象,而不是说,boost的实现.至少在Visual Studio中,std::shared_ptr看起来像调试器中的普通指针,同时boost::shared_ptr暴露了一堆boost的内部.boost::shared_ptr理解移动语义.std::shared_ptr正确使用delete []数组类型,同时boost::shared_ptr在这种情况下导致未定义的行为(你必须使用shared_array或自定义删除)unique_ptr,而不是shared_ptr.)一个主要的明显原因是:
最后,你真的不必选择.(如果您的目标是特定的编译器系列(例如MSVC和GCC),您可以轻松扩展它以便std::tr1::shared_ptr在可用时使用.不幸的是,似乎没有一种标准方法来检测TR1支持)
#if __cplusplus > 199711L
#include <memory>
namespace MyProject
{
using std::shared_ptr;
}
#else
#include <boost/shared_ptr.hpp>
namespace MyProject
{
using boost::shared_ptr;
}
#endif
Run Code Online (Sandbox Code Playgroud)
小智 13
我想这取决于你使用多少提升.我个人只是非常谨慎地使用它(实际上是随机数字库,在一个项目中).我最近开始使用-std=c++0x我的其他项目,并且我使用了新的std :: library功能,例如shared_ptr.我喜欢我的项目具有最少的依赖性,所以我宁愿依赖于编译器的标准库实现而不是boost.
但我不认为这个问题有一个通用的答案.
| 归档时间: |
|
| 查看次数: |
29218 次 |
| 最近记录: |