C++ catching dangling reference

前端 未结 7 821
温柔的废话
温柔的废话 2020-12-14 22:02

Suppose the following piece of code

struct S {
    S(int & value): value_(value) {}
    int & value_;
};

S function() {
    int value = 0;
    retur         


        
相关标签:
7条回答
  • 2020-12-14 22:31

    Your code shouldn't even compile. The compilers I know of will either fail to compile the code, or at the very least throw a warning.

    If you meant return S(value) instead, then for heavens sake COPY PASTE THE CODE YOU POST HERE.

    Rewriting and introducing typos just means it is impossible for us to actually guess which errors you're asking about, and which ones were accidents we're supposed to ignore.

    When you post a question anywhere on the internet, if that question includes code, POST THE EXACT CODE.

    Now, assuming this was actually a typo, the code is perfectly legal, and there's no reason why any tool should warn you.

    As long as you don't try to dereference the dangling reference, the code is perfectly safe.

    It is possible that some static analysis tools (Valgrind, or MSVC with /analyze, for example) can warn you about this, but there doesn't seem to be much point because you're not doing anything wrong. You're returning an object which happens to contain a dangling reference. You're not directly returning a reference to a local object (which compilers typically do warn about), but a higher level object with behavior that might make it perfectly safe to use, even though it contains a reference to a local object that's gone out of scope.

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