Middle
Роли делимитаторҳо дар нишондиҳандаҳои зеҳнӣ чист?
sobes.tech AI
Ҷавоб аз AI
Делиторон (deleters) дар ишораҳои оқилона имкон медиҳанд, ки логикаи фармоишии озодкунии манбаъро, ки ишора мекунад, муайян кунанд. Ба таври стандартӣ, std::unique_ptr delete-ро истифода мебарад, ва std::shared_ptr delete ё delete[]-ро. Делеетер метавонад функсия, функторат ё ифодаи lambda бошад.
Масалан:
std::unique_ptr бо делитори функсия:
#include <cstdio> // Барои fclose
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 бо делитори lambda:
#include <iostream>
#include <memory>
// ...
// auto resource_deleter = [](int* p){ std::cout << "Зеро кардани манбаъ\n"; delete p; };
// std::unique_ptr<int, decltype(resource_deleter)> ptr(new int(10), resource_deleter);
// ...
std::shared_ptr бо делитори lambda:
#include <iostream>
#include <memory>
// ...
// std::shared_ptr<int> shared_ptr_with_deleter(new int(20), [](int* p){ std::cout << "Зеро кардани манбаи тақсимшуда\n"; delete p; });
// ...
Ролаи делиторон дар сценарияҳои зерин муҳим аст:
- Идоракунии манбаъҳои ғайримемории: Файлҳо, сӯроқҳои шабакавӣ, идоракунандагони базаи додаҳо ва ғайра.
- Танзим кардани раванди озодкунии меморӣ: Масалан, истифодаи
delete[]барои массивҳо ё пулҳои объектҳо. - Логикаи иловагӣ ҳангоми озодкунӣ: Сабт, тозакунӣ структураҳои алоқаманд.
Барои std::unique_ptr, навъи делитора қисми навъи ишоракунанда аст, ки метавонад кор бо полиморфизмро мураккаб созад. Барои std::shared_ptr, навъи делитора қисми навъи ишоракунанда нест, ки имконияти бештарро таъмин мекунад.