Junior
Kādi ir gudrie norādītāji C++?
sobes.tech AI
Atbilde no AI
std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:- Ekskluzīva objekta īpašība.
- Nav kopējams, bet var tikt pārvietots (
std::move). - Automātiski iznīcina objektu, izejot no redzes lauka vai iznīcinot
unique_ptr. - Viegls, bez papildu izmaksām saistīto skaitītāju.
#include <memory> // `unique_ptr` izveide std::unique_ptr<int> up1(new int(10)); // Īpašuma pārvietošana std::unique_ptr<int> up2 = std::move(up1); // up1 tagad nullptr // up2 pārvalda objektu -
std::shared_ptr:- Kopīgs objekta pārvaldījums.
- Izmanto atsauču skaitītāju, lai uzraudzītu, cik
shared_ptrnorāda uz resursu. - Objekts tiek iznīcināts, kad pēdējais
shared_ptrto iznīcina. - Var kopēt un pārvietot.
- Tam ir papildu izmaksas atsauču skaitītājam (parasti atsevišķi piešķirts).
- Var rasties cikliskas atsauces, kas noved pie atmiņas noplūdes.
#include <memory> // `shared_ptr` izveide std::shared_ptr<int> sp1 = std::make_shared<int>(20); // Kopēšana std::shared_ptr<int> sp2 = sp1; // Atsauču skaitītājs palielinās // sp1 un sp2 pārvalda objektu -
std::weak_ptr:- Nevalda objektu.
- Attēlo "vāju" norādi uz objektu, ko pārvalda viens vai vairāki
shared_ptr. - Izmanto ciklisku norāžu novēršanai starp
shared_ptr. - Nepalielina atsauču skaitītāju.
- Lai droši piekļūtu objektam, nepieciešams pārveidot uz
shared_ptrarlock()metodi. Ja objekts jau ir izdzēsts,lock()atgriezīs tukšushared_ptr.
#include <memory> // `shared_ptr` izveide std::shared_ptr<int> sp = std::make_shared<int>(30); // `weak_ptr` izveide no `shared_ptr` std::weak_ptr<int> wp = sp; // Pārbaude un izmantošana if (auto shared_from_weak = wp.lock()) { // Pieeja objektam } else { // Objekts jau ir izdzēsts }