考虑下面的简单代码。
struct test
{
test(int n):numelements(n){ arr = new int[numelements] }
int numelements;
int* arr;
~test()
{
delete[] arr;
}
}
void foo_ref(test& x,n)
{
// set first n elements of the array x.arr to random numbers
}
void foo_ptr(test* x,n)
{
// set first n elements of the array x->arr to random numbers
}
int main(void)
{
test mystruct(1000000);
foo_ref(mystruct,20);
// foo_ptr(&mystruct,20);
return 0;
}
在上面的代码中,foo_ref
对它foo_ptr
引用的对象执行完全相同的操作,即。mystruct
. 但是 foo_ref 通过引用传递对象,而 foo_ptr 通过指针传递。
在这两种情况下,调用对象的析构函数在哪里?我知道这个问题的标准答案总是“当对象的范围结束时”
但是考虑通过引用传递的情况。在 mystruct 的主体内foo_ref
具有该函数的范围。那么对象的析构函数不会在函数结束时被调用foo_ref
吗?
也许我的困惑与对事物范围的理解有关。请让我知道我的推理哪里出错了。