c++调用析构函数
Where C++ calls destructors?
假设Member
和MyList
是两个用户定义的类。在以下代码中:
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++在什么时候调用m1
, m2
和lst
的析构函数?
假设c++不会删除将再次使用的对象是否总是安全的?
c++在什么时候调用每个m1, m2和list的析构函数?
析构函数在作用域的末尾以与对象定义相反的顺序调用。在您的示例中,首先调用func1()
,它定义lst
,然后调用fillList()
,它定义m1
和m2
。接下来fillList()
结束,所以现在调用m2
和m1
析构函数(与声明顺序相反)。最后func1()
结束,因此调用lst
析构函数。
我不太明白你的意思。被销毁的对象已经消失,您不能再使用它了。试图访问它(通过悬空指针/引用)只是未定义的行为。假设c++不会删除将再次使用的对象是否总是安全的?
析构函数在其作用域的末尾被调用(如果在'stack'上分配),或者当您手动调用它们的delete
操作符(如果动态分配)时被调用。
关于你的另一个问题,肯定不能做任何这样的假设。c++很乐意让你用你喜欢的钝锯砍掉自己的腿。它可能会问你是否想要一些小猫形状的创可贴(你必须自己做),但仅此而已。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库