Giả sử rằng chúng ta không muốn đối tượng của chúng ta chia sẻ bất kỳ dữ liệu nào. Chúng ta muốn cô lập các đối tượng và giữ chúng tách rời nhau. Để làm việc đó chúng ta cần thêm một copying constructor tường minh vào cho lớp. Copying constructor mà chúng ta thêm vào sẽ tự chịu trách nhiệm tạo ra bản sao. Hãy nhớ rằng việc sao chép sẽ không còn tự động nữa một khi một lớp đã khai báo một copying constructor.
Chương trình bây giờ như sau →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <iostream> using namespace std; class Class { int *data; public: Class(int value) { data = new int; *data = value; } Class(Class &source) { data = new int; *data = source.value(); } void increment(void) { (*data)++; } int value(void) { return *data; } }; int main(void) { Class o1(123); Class o2 = o1; Class o3(o2); o1.increment(); cout << o1.value() << endl; cout << o2.value() << endl; cout << o3.value() << endl; return 0; } |
copying constructor mới được thêm vào đã cấp phát một bộ nhớ mới và sao chép nội dung dữ liệu gốc vào đó. Điều này đảm bảo rằng đối tượng mới sẽ được tách biệt khỏi đối tượng gốc và sẽ không có phần bộ nhớ dùng chung.
Chương trình sẽ xuất các dòng sau ra màn hình:
1 2 3 |
124 123 123 |