【发布时间】:2014-01-03 00:40:52
【问题描述】:
我知道这可能听起来微不足道,但我是 C++ OOP 的新手。非常感谢您的帮助!
例如,对于以下代码:
using namespace std;
class Object {
public:
int arr[10];
Object(int b) {memset(arr, 0, sizeof(arr));}
};
void test(Object &first, Object other)
{
cout << "Test" << endl;
cout << (first.arr) << endl;
cout << (other.arr) << endl;
return;
}
int main()
{
Object x(2);
Object y(3);
test(x, y);
return 0;
}
请注意,在函数声明 void test(Object &first, Object other) 中,第一个参数采用原始别名,而第二个参数采用副本。
我知道Object other 创建了传递给此函数的对象的本地副本。但问题是:成员arr 是否也被复制了?换句话说,当调用test(x, y) 时,y.arr 和other.arr 是指向同一个数组还是不同的数组?
如果执行复制,是执行浅拷贝还是深拷贝?
如果不是声明int arr[10],而是使用int *arr,并且使用new关键字在构造函数中动态分配arr,情况会怎样?
非常感谢!
编辑:我的发现
是不是在声明int arr[10]的情况下,复制了一个新数组,新数组里面的元素指向原数组中的对象?
当使用new关键字动态分配时,复制的数组还是指向复制对象数组的指针?
【问题讨论】:
-
您费尽心思编写了大部分代码来为自己找到答案;完成这项工作不是更令人满意吗?
-
老实说,我正在寻求对我的发现的确认:是否在复制新数组时,数组中的元素指向原始数组中的对象?而当使用
new动态分配时,数组还是指向被复制对象的数组的指针? -
帖子似乎没有被编辑;你的发现是什么?
-
请看上面的评论,谢谢。
-
这能回答你的问题吗:stackoverflow.com/questions/4164279/…