Странное поведение деструктора С++
Код:
shared_ptr<People> func() noexcept
{
shared_ptr<People> p = make_shared<Man>();
return p; //1
}
int main() noexcept
{
shared_ptr<People> pep = func();
pep->Speak();
return 0;
}
На строчке под комментарием 1 должен вызываться деструктор объекта p, но этого не происходит и код работает, почему?
Ответы (1 шт):
Автор решения: d1ke
→ Ссылка
Деструктор не вызывается из-за оптимизации компилятора (см. copy elision). В случаях когда применить её невозможно, из метода будет возвращена копия p, поэтому всё будет работать в любом случае.