Sobes.tech
Junior

Millised on nutikad näidikud C++-s?

sobes.tech AI

Vastus AI-lt

std::unique_ptr, std::shared_ptr, std::weak_ptr.

  • std::unique_ptr:

    • Eksklusiivne objekti omandamine.
    • Ei saa kopeerida, kuid saab üle viia (std::move).
    • Automaatselt kustutab objekti väljaspool vaateala või unique_ptr hävitamisel.
    • Kerge, ilma lisakuludeta viitearvutaja kohta.
    #include <memory>
    
    // `unique_ptr` loomine
    std::unique_ptr<int> up1(new int(10));
    
    // Omandi üleandmine
    std::unique_ptr<int> up2 = std::move(up1);
    
    // up1 nüüd nullptr
    // up2 omab objekti
    
  • std::shared_ptr:

    • Ühine objekti omamine.
    • Kasutab viitenumbrilist, jälgides, mitu shared_ptr viitab ressursile.
    • Objekt kustutatakse, kui viimane shared_ptr selle hävitab.
    • Võib kopeerida ja üle viia.
    • Omab lisakulusid viitenumbrile (tavaliselt eraldi eraldatud).
    • Võib tekkida tsüklilisi viiteid, mis põhjustab mälu lekkimist.
    #include <memory>
    
    // `shared_ptr` loomine
    std::shared_ptr<int> sp1 = std::make_shared<int>(20);
    
    // Omandi kopeerimine
    std::shared_ptr<int> sp2 = sp1; // Viitenumbriline suureneb
    
    // sp1 ja sp2 omavad objekti
    
  • std::weak_ptr:

    • Ei omanda objekti.
    • Esindab "nõrka" viidet objekti, mida haldab üks või mitu shared_ptr.
    • Kasutatakse tsükliliste viidete vältimiseks shared_ptr vahel.
    • Ei suurenda viitenumbrilist.
    • Turvaliseks juurdepääsuks objektile tuleb teisendada shared_ptr-ks lock() meetodi abil. Kui objekt on juba kustutatud, lock() tagastab tühja shared_ptr.
    #include <memory>
    
    // `shared_ptr` loomine
    std::shared_ptr<int> sp = std::make_shared<int>(30);
    
    // `weak_ptr` loomine `shared_ptr`-st
    std::weak_ptr<int> wp = sp;
    
    // Kontroll ja kasutamine
    if (auto shared_from_weak = wp.lock()) {
        // Objektile juurdepääs
    } else {
        // Objekt on juba kustutatud
    }