在容器中使用reference_wrapper而不是原始指针的好处?

nca*_*sas 23 c++ stl c++11

使用std::reference_wrapper容器的模板参数而不是原始指针有什么好处?这是std::vector<std::reference_wrapper<MyClass> >std::vector<MyClass*>

我喜欢忘记空值而不必使用指针语法,但是类型的冗长(即vector<reference_wrapper<MyClass> >)加上调用站点使用std :: ref来包装实际引用会让我觉得它不值得.

我指的是使用std :: shared_ptr或任何其他智能指针不是一个选项的情况.

使用reference_wrapper或我目前没有考虑的任何其他因素有其他好处吗?(我认为我的问题适用于C++ 11的reference_wrapper和boost)

Phi*_*ati 21

我认为没有任何技术差异.引用包装器提供基本指针功能,包括动态更改目标的功能.

一个好处是它表明了意图.它告诉那些阅读代码的人,"谁拥有变量",实际上并没有控制其生命周期.用户没有忘记删除或新的任何东西,有些人在看到指针语义时可能会开始寻找.