gpt4 book ai didi

c++ - C++在哪里调用析构函数?

转载 作者:行者123 更新时间:2023-11-28 00:15:34 24 4
gpt4 key购买 nike

假设 MemberMyList 是两个用户定义的类。在以下代码中:

void fillList(MyList &list1)
{
Member m1("aaa");
Member m2("bbb");
list1.insert(m1);
list1.insert(m2);
}

void func1()
{
MyList lst;
fillList(lst);
lst.printAll();
}

int main()
{
func1();
return 0;
}

C++ 在什么时候调用每个 m1m2lst 的析构函数?

假设 C++ 不会删除将再次使用的对象总是安全的吗?

最佳答案

At which point does C++ call destructor of each m1, m2 and lst?

析构函数在范围的末尾以对象定义的相反顺序调用。在您的情况下,首先调用 func1(),它定义了 lst,然后调用 fillList(),它定义了 m1m2。接下来 fillList() 结束,所以现在调用 m2 然后调用 m1 析构函数(按照它们声明的相反顺序)。最后 func1() 结束,所以 lst 析构函数被调用。

Is it always safe to assume C++ does not remove an object which will be used again?

我不太明白你的意思。被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬挂指针/引用)只是未定义的行为。

关于c++ - C++在哪里调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30554412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com