Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Các thành viên mảng có được sao chép sâu (deep copy) trong C++?


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.