When is it valid to access a pointer to a “dead” object?

后端 未结 3 1250
野性不改
野性不改 2020-12-02 15:09

First, to clarify, I am not talking about dereferencing invalid pointers!

Consider the following two examples.

Example 1

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-02 15:53

    C++ discussion

    Short answer: In C++, there is no such thing as accessing "reading" a class instance; you can only "read" non-class object, and this is done by a lvalue-to-rvalue conversion.

    Detailed answer:

    typedef struct { int *p; } T;
    

    T designates an unnamed class. For the sake of the discussion let's name this class T:

    struct T {
        int *p; 
    };
    

    Because you did not declare a copy constructor, the compiler implicitly declares one, so the class definition reads:

    struct T {
        int *p; 
        T (const T&);
    };
    

    So we have:

    T a;
    T b = a;    // Access through a non-character type?
    

    Yes, indeed; this is initialization by copy constructor, so the copy constructor definition will be generated by the compiler; the definition is equivalent with

    inline T::T (const T& rhs) 
        : p(rhs.p) {
    }
    

    So you are accessing the value as a pointer, not a bunch of bytes.

    If the pointer value is invalid (not initialized, freed), the behavior is not defined.

提交回复
热议问题