Tất nhiên, chúng ta có thể tự bảo vệ mình khỏi vấn đề này (vấn đề được nêu ra ở 6.5.2) bằng cách không sử dụng copying constructor.
Ví dụ 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 |
#include <iostream> using namespace std; class Class { int *data; public: Class(int value) { data = new int; *data = value; } void increment(void) { (*data)++; } int value(void) { return *data; } }; int main(void) { Class o1(123); Class o2(o1.value()); Class o3(o2.value()); o1.increment(); cout << o1.value() << endl; cout << o2.value() << endl; cout << o3.value() << endl; return 0; } |
cho thấy một chương trình không sử dụng bất kỳ cú pháp có thể dẫn đến việc sử dụng copying constructor ngầm định. Nó chỉ sử dụng một constructor tường minh, đó là constructor có một tham số kiểu int.
Giờ thì chương trình sẽ cho ra kết quả sau:
1 2 3 |
124 123 123 |
Tuy nhiên đây không phải là cách mà chúng tôi khuyến khích các bạn làm. Hãy xem tiếp các trang tiếp theo, chúng tôi sẽ hướng dẫn các bạn xử lý hợp lý hơn.