warum ein Byte für ein Objekt?



  • Wenn man ein Objekt einer Klasse ohne Attribute erzeugt, wird ein Byte im Speicher allokiert, das im lokalen Speicher überhaupt nicht und im globalen Speicher mit null initialisiert wird. Wozu dient dieses Byte (Adresse: this) eigentlich?

    #include <iostream>
    using namespace std;
    
    class X
    { 
      private: 
        //...
      public: 
        void holeAdresse() const;
        void zeigeInhaltVonAdresse(); 
    };
    
    void X::holeAdresse() const 
    { 
      cout << reinterpret_cast<int>(this) << '\n';
    }
    
    void X::zeigeInhaltVonAdresse() 
    {
      unsigned char* pObj = reinterpret_cast<unsigned char*>(this);
      cout << static_cast<unsigned int>(*pObj) << '\n';  
    }    
    
    int main()
    {
      X a,b,c;
    
      a.holeAdresse();
      b.holeAdresse();
      c.holeAdresse();    
    
      a.zeigeInhaltVonAdresse();
      b.zeigeInhaltVonAdresse();
      c.zeigeInhaltVonAdresse();    
    
      cin.get();
    }
    


  • Wenn sizeof(A) 0 wäre dann wäre bei

    A a,b;
    

    &a gleich &b jedoch sind es zwei Objekte und somit darf das nicht sein.



  • evtl. lohnt es sich noch hinzuzufügen:
    Der Compiler darf den Speicher für "leere" Basisklassen weglassen, in allen anderen Fällen muß er das eine Byte allozieren.


Log in to reply