Sobes.tech
Middle

Кай вақт дар ишораҳои зеҳнӣ оператори delete барои объект даъват намешавад?

sobes.tech AI

Ҷавоб аз AI

Ҳақиқий кўрсаткич билан бошқарилаётган объект учун delete амалиёти қуйидаги ҳолларда чақирилмайди:

  • std::shared_ptr учун: агар энг камида бошқа бир shared_ptr шу объектни эгалласа. Ўчириш фақатгина референслар сони нолга етганда амалга ошади.

  • std::weak_ptr учун: у объектга эгалик қилмайди, фақат унга ишора қилади, шунинг учун delete weak_ptr йўқ қилинганда чақирилмайди.

  • std::unique_ptr учун: агар кўрсаткич ўтказилган ёки кўчирилган бўлса ва ҳозирги unique_ptr объектга эгалик қилмай қолган бўлса.

  • Агар ақлли кўрсаткич махсус deleter билан яратилган бўлса ва у delete-ни чақирмаса (масалан, ресурсни бошқа усул билан озод қилади).

std::shared_ptr билан мисол:

#include <memory>
#include <iostream>

struct Foo {
    ~Foo() { std::cout << "Foo йўқ қилинди\n"; }
};

int main() {
    std::shared_ptr<Foo> sp1(new Foo());
    {
        std::shared_ptr<Foo> sp2 = sp1; // ишоралар сони = 2
    } // sp2 йўқ қилинади, ишоралар сони = 1, delete чақирилмайди
    // delete фақат sp1 ҳам йўқ қилинганда чақирилади
}

Бу ерда, delete фақат охирги shared_ptr йўқ қилингандан кейин чақирилади.