编码:
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 对象的析构函数,但这并没有发生并且代码有效,为什么?
由于编译器优化,未调用析构函数(请参阅复制省略)。在无法应用的情况下,将从方法返回 p 的副本,因此一切都会正常工作。