datenstruktur ohne initialisierung von nullern?



  • Hallo,

    welche c++ datenstruktur wird ohne memset bzw. ohne nuller initialisiert?

    bei z.B. std::vector wie ich gerade ausprobert habe ist alles mit 0 vorinitialisiert....



  • Allein an der Fragestellung rieche ich schon, dass du nichts Sinnvolles damit vorhast.



  • Von welcher Datenstruktur redest du?



  • jappagg schrieb:

    Hallo,

    welche c++ datenstruktur wird ohne memset bzw. ohne nuller initialisiert?

    1. Die wirklich korrekte Antwort auf die Frage (so wie du sie formuliert hast) wäre: Jede Datenstruktur, die einen oder mehrere Konstruktoren hat, die allesamt
      a) kein memset benutzen
      b) keines der Member mit einem "nuller" initialisieren.

    2. Die richtige Antwort auf deine Frage (so wie man sie allgemein verstehen könnte) wäre: Jede Datenstruktur, die einen Konstruktor hat, der eines oder mehrere der Member mit einem Wert ungleich Null initialisiert.
      z.B.

    class Foo
    {
      int bar;
    public:
      Foo() : bar(12) {}
    };
    
    1. Die Antwort auf das, was du vermutlich gemeint haben könntest (aus deiner schwammigen Ausdrucksweise geschlussfolgert):
      PODs (Plain Old Data) werden garnicht initialisiert, enthalten also nach der Erzeugung "Zufallswerte" (eben das, was grad dort im Speicher stand). Was PODs sind steht in campers "kleine Taxonomie der Typen" in der FAQ.


  • jede poplige variable

    int i;
    cout << i;

    😮



  • pumuckl schrieb:

    jappagg schrieb:

    Hallo,

    welche c++ datenstruktur wird ohne memset bzw. ohne nuller initialisiert?

    1. Die wirklich korrekte Antwort auf die Frage (so wie du sie formuliert hast) wäre: Jede Datenstruktur, die einen oder mehrere Konstruktoren hat, die allesamt
      a) kein memset benutzen
      b) keines der Member mit einem "nuller" initialisieren.

    2. Die richtige Antwort auf deine Frage (so wie man sie allgemein verstehen könnte) wäre: Jede Datenstruktur, die einen Konstruktor hat, der eines oder mehrere der Member mit einem Wert ungleich Null initialisiert.
      z.B.

    class Foo
    {
      int bar;
    public:
      Foo() : bar(12) {}
    };
    
    1. Die Antwort auf das, was du vermutlich gemeint haben könntest (aus deiner schwammigen Ausdrucksweise geschlussfolgert):
      PODs (Plain Old Data) werden garnicht initialisiert, enthalten also nach der Erzeugung "Zufallswerte" (eben das, was grad dort im Speicher stand). Was PODs sind steht in campers "kleine Taxonomie der Typen" in der FAQ.

    wieso kein memset benutzen? nur weil es eine c funktion ist? ^^



  • ______ schrieb:

    wieso kein memset benutzen? nur weil es eine c funktion ist? ^^

    Nein, weil er extra nach Datenstrukturen ohne memset gefragt hat. Und jein: memset darf in C++ nur für PODs benutzt werden. Wer mit memset im Inhalt von nicht-PODs rumschreibt umgeht Klasseninvarianten und handelt sich ggf. Inkonsistenten, Speicherlecks und andere Späße ein.


Anmelden zum Antworten