Sobes.tech
Middle

Ağıllı göstəricilərdə ayırıcıların rolu nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Ağıllı göstəricilərdə (smart pointers) deleterlər, ağıllı göstəricinin göstərdiyi resursu sərbəst buraxmaq üçün xüsusi məntiqi təyin etməyə imkan verir. Standart olaraq, std::unique_ptr delete istifadə edir və std::shared_ptr delete və ya delete[] istifadə edir. Deleter funksiyası, funktor və ya lambda ifadəsi ola bilər.

Nümunələr:

std::unique_ptr ilə funksiya-deleter:

#include <cstdio> // fclose üçün

void file_deleter(FILE* file) {
    if (file) {
        fclose(file);
    }
}

// ...
// std::unique_ptr<FILE, decltype(&file_deleter)> file_ptr(fopen("example.txt", "r"), &file_deleter);
// ...

std::unique_ptr ilə lambda-deleter:

#include <iostream>
#include <memory>

// ...
// auto resource_deleter = [](int* p){ std::cout << "Resurs silinir\n"; delete p; };
// std::unique_ptr<int, decltype(resource_deleter)> ptr(new int(10), resource_deleter);
// ...

std::shared_ptr ilə lambda-deleter:

#include <iostream>
#include <memory>

// ...
// std::shared_ptr<int> shared_ptr_with_deleter(new int(20), [](int* p){ std::cout << "Paylaşılan resurs silinir\n"; delete p; });
// ...

Deleterlərin rolu aşağıdakı hallarda vacibdir:

  • Memoriyadan başqa resursların idarə olunması: Fayllar, şəbəkə soketləri, verilənlər bazası idarəediciləri və s.
  • Memoriyanın sərbəst buraxılma prosesinin tənzimlənməsi: Məsələn, delete[] istifadə edilən massivlər və ya obyekt hovuzları.
  • Əlavə məntiq sərbəst buraxılarkən: Qeydiyyat, əlaqəli strukturların təmizlənməsi.

std::unique_ptr üçün, deleterin tipi göstərici tipinin bir hissəsidir, bu da polimorfizm ilə işləməyi çətinləşdirə bilər. std::shared_ptr üçün isə, deleterin tipi göstərici tipinin bir hissəsi deyil, bu da daha çox elastiklik təmin edir.