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_ptrhä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_ptrviitab ressursile. - Objekt kustutatakse, kui viimane
shared_ptrselle 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_ptrvahel. - Ei suurenda viitenumbrilist.
- Turvaliseks juurdepääsuks objektile tuleb teisendada
shared_ptr-kslock()meetodi abil. Kui objekt on juba kustutatud,lock()tagastab tühjashared_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 }