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.