请考虑以下简单代码。通过引用传递对象而不通过指针传递的对象的作用域
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通过指针传递对象。
在这两种情况下其中是被调用的对象的析构函数?我知道这个问题的标准答案始终是“当一个对象的范围结束”
但是考虑通过引用传递的情况。在foo_ref
的内部,mystruct具有该函数的范围。所以在功能foo_ref
的末尾不会调用该对象的析构函数吗?
也许我的困惑与某物的范围的理解做。 请让我知道我在我的推理中犯错的地方。
你知道':包含numElements(N),编曲(新INT [包含numElements])'是有效的,也只要'numelements'在你的类中的'arr'之前声明。 – chris
让我们看看代码foo_ref – Mark
@标记见编辑。他们只是函数,说初始化一些元素或任何 – smilingbuddha