c ++当我将数组分配给另一个时,实际上会复制什么

mys*_*ick -1 c++ arrays

我试图理解当我为一个数组指针分配另一个数组时,C++中会发生什么.说我有:

int *a = new int[10];
int *b = new int[10];

for (int i =0; i< 10; i++) {
    a[i] = i;
}

b=a; 
Run Code Online (Sandbox Code Playgroud)

当我打印出我的值得b到相同的值a.说得通.但实际上在b指针中保存了什么?它是数组的内存地址a吗?我尝试打印出来&a,&b但我得到两个不同的值.然后如何b获得所有的价值a

另外,如果他们单独存储将a在转移后删除吗?delete [] a

谢谢我对C++很陌生,任何帮助都会很棒.

Som*_*ude 7

首先,您不会将一个数组分配给另一个数组,而是将一个指针指向另一个指针.如果仅靠这一点并不能让您更容易理解正在发生的事情,那么请继续阅读......

当你这样做

int *a = new int[10];
int *b = new int[10];
Run Code Online (Sandbox Code Playgroud)

你会得到这样的东西:

+---+      +------------------------+
| a | ---> | Memory allocated for a |
+---+      +------------------------+

+---+      +------------------------+
| b | ---> | Memory allocated for b |
+---+      +------------------------+

任务完成后

b = a;
Run Code Online (Sandbox Code Playgroud)

它看起来像这样

+---+      +------------------------+
| a | -+-> | Memory allocated for a |
+---+  |   +------------------------+
       |
+---+  |   +------------------------+
| b | -/   | Memory allocated for b |
+---+      +------------------------+

换句话说,b指向相同的内存a,没有任何内容指向最初分配的内存,b因此无法访问,并且您将有内存泄漏.

此外,尝试做

delete[] a;
delete[] b;
Run Code Online (Sandbox Code Playgroud)

当您尝试两次释放相同的内存时,将导致未定义的行为.