Кай вақт дар ишораҳои зеҳнӣ оператори delete барои объект даъват намешавад?
sobes.tech AI
Ҷавоб аз AI
Ҳақиқий кўрсаткич билан бошқарилаётган объект учун delete амалиёти қуйидаги ҳолларда чақирилмайди:
-
std::shared_ptrучун: агар энг камида бошқа бирshared_ptrшу объектни эгалласа. Ўчириш фақатгина референслар сони нолга етганда амалга ошади. -
std::weak_ptrучун: у объектга эгалик қилмайди, фақат унга ишора қилади, шунинг учунdeleteweak_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 йўқ қилингандан кейин чақирилади.