Middle
Акылдуу көрсөткүчтөрдө объект үчүн 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 жок кылынгандан кийин гана чакырылат.