Junior
C++-də hansı ağıllı göstəricilər mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:- Ob'ektin ekskluziv mülkiyyəti.
- Kopyalanmaz, amma köçürülə bilər (
std::move). unique_ptr-in sahəsindən çıxanda və ya məhv olunduqda, ob'ekt avtomatik silinir.- Yüngüldür, referans sayğacına əlavə xərc yoxdur.
#include <memory> // unique_ptr yaradılması std::unique_ptr<int> up1(new int(10)); // Mülkiyyətin köçürülməsi std::unique_ptr<int> up2 = std::move(up1); // up1 indi nullptr // up2 ob'ektə sahibdir -
std::shared_ptr:- Ob'ektin ümumi mülkiyyəti.
- Resursa neçə
shared_ptr-ın istinad etdiyini izləmək üçün referans sayğacı istifadə olunur. - Son
shared_ptr-ın məhv olmasında, ob'ekt silinir. - Köçürülə və hərəkət etdirilə bilər.
- Referans sayğacı üçün əlavə xərc var (adətən ayrıca ayrılır).
- Döngüvi istinadlar yarada bilər, bu isə yaddaş sızmasına səbəb olar.
#include <memory> // shared_ptr yaradılması std::shared_ptr<int> sp1 = std::make_shared<int>(20); // Mülkiyyətin kopyalanması std::shared_ptr<int> sp2 = sp1; // Sayğac artır // sp1 və sp2 ob'ektə sahibdir -
std::weak_ptr:- Ob'ektə sahib deyil.
- Bir və ya bir neçə
shared_ptrtərəfindən idarə olunan ob'ektə "zəif" istinad edir. shared_ptr-lar arasında döngüvi istinadların qarşısını almaq üçün istifadə olunur.- Ob'ektin referans sayğacını artırmır.
- Ob'ektə təhlükəsiz giriş üçün,
lock()metodu iləshared_ptr-a çevrilməlidir. Əgər ob'ekt artıq silinibsə,lock()boşshared_ptrqaytaracaq.
#include <memory> // shared_ptr yaradılması std::shared_ptr<int> sp = std::make_shared<int>(30); // shared_ptr-dan weak_ptr yaradılması std::weak_ptr<int> wp = sp; // Ob'ektin yoxlanması və istifadəsi if (auto shared_from_weak = wp.lock()) { // shared_from_weak vasitəsilə ob'ektə giriş } else { // Ob'ekt artıq silinib }