請考慮以下簡單代碼。通過引用傳遞對象而不通過指針傳遞的對象的作用域
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