C++ 其中C++;调用析构函数?
假设C++ 其中C++;调用析构函数?,c++,class,memory-management,destructor,C++,Class,Memory Management,Destructor,假设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() {
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;
}
<> P> C++中的每个C++代码调用析构函数M1、<代码> M2和假定C++不删除将被再次使用的对象总是安全的吗?
在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用
func1()
,它定义lst
,然后调用fillList()
,它定义m1
和m2
。接下来fillList()
结束,现在调用m2
然后调用m1
析构函数(与它们的声明顺序相反)。最后func1()
结束,因此调用lst
析构函数
假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为
在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用
func1()
,它定义lst
,然后调用fillList()
,它定义m1
和m2
。接下来fillList()
结束,现在调用m2
然后调用m1
析构函数(与它们的声明顺序相反)。最后func1()
结束,因此调用lst
析构函数
假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为
在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用
func1()
,它定义lst
,然后调用fillList()
,它定义m1
和m2
。接下来fillList()
结束,现在调用m2
然后调用m1
析构函数(与它们的声明顺序相反)。最后func1()
结束,因此调用lst
析构函数
假定C++不删除将被再次使用的对象总是安全的吗?p> 我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为
在哪一点C++中调用M1、M2和LST? 析构函数在作用域的末尾调用,顺序与对象定义相反。在您的例子中,首先调用
func1()
,它定义lst
,然后调用fillList()
,它定义m1
和m2
。接下来fillList()
结束,现在调用m2
然后调用m1
析构函数(与它们的声明顺序相反)。最后func1()
结束,因此调用lst
析构函数
假定C++不删除将被再次使用的对象总是安全的吗?p>
我真的不明白你的意思。一个被破坏的对象消失了,你不能再使用它了。尝试访问它(通过悬空指针/引用)只是未定义的行为。析构函数在其作用域结束时(如果在“堆栈”上分配)或手动调用其
delete
运算符(如果动态分配)时被调用
至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用
至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用
至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问您是否需要一些小猫形状的绷带(您必须自己制作),但仅此而已。析构函数在其作用域结束时(如果在“堆栈”上分配)或当您手动调用其
delete
操作符(如果动态分配)时被调用
至于你的另一个问题,假设这类事情绝对是不安全的。C++让你用你喜欢的钝的锯来切断自己的腿。它可能会问你是否想要一些小猫形状的绷带(你必须自己做),但就这样。为什么不运行它呢?这似乎是用一些打印语句来验证的一个小问题。<代码>如果假设C++没有删除一个将被再次使用的对象,那么它总是安全的吗?< /代码>否。但是如果这个案例的工作取决于插入方法。“UB哪个有效”有很多问题。@deviantfan实际上我需要