Ugrás a tartalomhoz

nullptr

A Wikiszótárból, a nyitott szótárból


Főnév

nullptr (tsz. nullptrs)

  1. (informatika) A nullptr a C++ nyelvben egy null mutatót jelölő kulcsszó, amelyet a C++11 szabvány vezetett be, és a régi NULL makrót váltotta fel. A nullptr egy típusbiztos megoldás a null mutató kezelésére, amely segít elkerülni a NULL-lal kapcsolatos hibákat, különösen az értelmezési (overload resolution) problémákat.



Miért jobb a nullptr, mint a NULL?

  1. Típusbiztonság

    • A NULL makró általában 0-ként van definiálva (#define NULL 0), ami int típusú, és problémákat okozhat túlterhelt (overloaded) függvények esetén.
    • A nullptr saját típussal rendelkezik: std::nullptr_t, így egyértelműen mutatóként kezelhető.
  2. Overload resolution problémák elkerülése

    void foo(int);
    void foo(char*);
    
    int main() {
        foo(NULL);  // HIBA: Az int típusú NULL az int változatot hívja meg, nem a mutatósat.
        foo(nullptr); // HELYES: Egyértelműen a char* változat hívódik meg.
    }
    
  3. Jobb kompatibilitás modern C++ kóddal

    • A nullptr-t az új C++ szabványokkal tervezték, és támogatja az újabb nyelvi funkciókat.



Használata

  1. Egyszerű használat

    int* p = nullptr;  // p egy null mutató
    
  2. Függvényhívások

    void fun(int* p) {
        if (p == nullptr) {
            std::cout << "Null pointer passed\n";
        }
    }
    
    int main() {
        fun(nullptr);  // Biztonságosabb, mint NULL
    }
    
  3. Típusvizsgálat (std::nullptr_t)

    std::nullptr_t nptr;  // nptr egy nullptr típusú változó
    int* ptr = nullptr;
    
    if (ptr == nptr) {
        std::cout << "ptr is nullptr" << std::endl;
    }
    
  4. Osztályokban és smart pointerekkel

    class MyClass {
    public:
        void show() {
            std::cout << "Hello, World!\n";
        }
    };
    
    int main() {
        std::unique_ptr<MyClass> obj = nullptr;  // Biztonságos inicializálás
        if (!obj) {
            std::cout << "Object is null\n";
        }
    }
    



Gyakori kérdések és hibák

  • Mi történik, ha egy mutatóval dolgozunk, és az nullptr értéket kap?
    • Ha egy mutató nullptr értékkel rendelkezik, az azt jelenti, hogy nem mutat érvényes memóriaterületre. Bármilyen dereferálási (*ptr) próbálkozás “undefined behavior”-hez vezet.
  • Hogyan használható a nullptr C++98-ban?
    • Mivel a nullptr C++11 újdonság, régebbi verziókban ezt makróval vagy inline függvénnyel lehet szimulálni:

      #define nullptr 0
      
  • Használhatom a nullptr-t más típusokkal is?
    • A nullptr alapvetően csak mutatókhoz való, nem lehet például int típusú változóba tenni:

      int x = nullptr;  // HIBA: `nullptr` nem konvertálható `int` típusra
      



Összegzés

A nullptr egy erőteljes és biztonságosabb alternatíva a NULL helyett C++-ban. A nullptr típusbiztos, segít az overload resolution problémák elkerülésében, és természetesebb módon illeszkedik a modern C++ nyelvi elemekhez. Ha C++11 vagy újabb verziót használsz, mindig érdemes nullptr-t használni NULL helyett.