Trong C/C++, ta có thể gán biến struct (hoặc class trong C++) cho biến cùng kiểu. Khi gán, tất cả thành viên được sao chép. Câu hỏi: nếu struct chứa mảng thì sao?
Điểm chính: Thành viên mảng không được sao chép nông (shallow copy); trình biên dịch tự động thực hiện Deep Copy cho thành viên mảng.
Trong chương trình dưới, struct test có thành viên mảng str1[]. Khi gán st1 cho st2, st2 nhận bản sao mới của mảng. Do đó sửa st1.str[] không ảnh hưởng st2.
Ví dụ
# include <iostream>
# include <string.h>
using namespace std;
struct test {
char str1[20];
};
int main() {
struct test st1, st2;
strcpy(st1.str1, "Tutorial Point");
st2 = st1;
st1.str1[0] = 'X';
st1.str1[1] = 'Y';
/* Vì sao chép sâu, hai mảng khác nhau */
cout << "st1's str = " << st1.str1 << endl;
cout << "st2's str = " << st2.str1 << endl;
return 0;
}
Kết quả
st1's str = XYtorial Point st2's str = Tutorial Point
Vì vậy, trong class C++, ta không cần viết copy constructor và assignment operator riêng cho thành viên mảng vì hành vi mặc định đã là Deep Copy.