Benefits of using reference_wrapper instead of raw pointer in containers?

前端 未结 2 583
南旧
南旧 2021-02-02 10:01

What benefits has using std::reference_wrapper as template parameter of containers instead of raw pointers? That is std::vector

相关标签:
2条回答
  • 2021-02-02 10:55

    I don't think there is any technical difference. Reference wrapper provides basic pointer functionality, including the ability to change the target dynamically.

    One benefit is that it demonstrates intent. It tells people who read the code that "whoever" has the variable, isn't actually controlling its lifespan. The user hasn't forgotten to delete or new anything, which some people may start to look for when they see pointer semantics.

    0 讨论(0)
  • 2021-02-02 11:04

    C references are really problematic while working with templates. If you are "lucky" enough to compile code with reference as a template parameter you might have problems with code that would work (for some reason) as follows:

    template<class T> f(T x) { g(x); }
    template<class T> g(T x) { x++; }
    

    Then even if you call f<int&>(x) it will call g<int>. But reference_wrapper works fine with templates.

    As also mentioned earlier - you will have problems with compiling things like vector<int&>, but vector<reference_wrapper<int>> works fine.

    0 讨论(0)
提交回复
热议问题