Sobes.tech
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, навъи делитора қисми навъи ишоракунанда нест, ки имконияти бештарро таъмин мекунад.