假设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;
}
是两个用户定义的类。在以下代码中:
m1
C ++在何时调用每个m2
,lst
和echo '<script type="text/javascript">
alert("Sorry, there is no download available for this product! Please contact support.");
window.close();
</script>';
exit;
的析构函数?
假设C ++没有删除将再次使用的对象是否总是安全的?
答案 0 :(得分:2)
C ++在哪一点上调用每个m1,m2和lst的析构函数?
在作用域定义的相反顺序中,在作用域的末尾调用析构函数。在您的情况下,首先调用try
{
Console.WriteLine("The number of lines you want to calculate up to");
int loops = Convert.ToInt16(Console.ReadLine());
if (loops < 0)
{
Console.WriteLine("Can not enter a value less then zero... Try Again?");
Console.ReadLine();
goto Start;
}
Console.WriteLine("What multiplication tables would you like to do ?");
int m = Convert.ToInt16(Console.ReadLine());
for (int i = 1; i <= loops; i++)
{
Console.WriteLine(i * m);
}
}
catch
{
Console.WriteLine("Enter numbers only");
Console.ReadLine();
goto Start;
}
,其定义func1()
,然后调用lst
,其定义fillList()
和m1
。接下来m2
结束,所以现在fillList()
然后调用m2
析构函数(与它们的声明相反)。最后m1
结束,因此调用func1()
析构函数。
假设C ++没有删除将再次使用的对象总是安全的吗?
我真的不明白你的意思。被破坏的物体消失了,你不能再使用它了。试图访问它(通过悬空指针/引用)只是未定义的行为。
答案 1 :(得分:1)
在范围的末尾调用析构函数(如果在“堆栈”上分配)或手动调用其delete
运算符(如果动态分配)。
关于你的另一个问题,绝对是不安全地承担任何类似的事情。 C ++很乐意让你用你喜欢的钝锯切断自己的腿。它可能会问你是否想要一些小猫形状的绷带(你必须自己做),但这就是它。