Trong một số trường hợp (đặc biệt khi cấu trúc của lớp phức tạp và cần cẩn thận nhiều hơn trong quá trình tạo đối tượng, nhiều hơn bất kỳ constructor sao chép nào có thể cung cấp), bạn có thể muốn ngăn không cho việc sử dụng bất kỳ copying constructor nào, ép buộc người dùng tạo ra đối tượng của lớp một cách chi tiết hơn (ví dụ như sử dụng các hàm khởi tạo tường minh khác).
Để làm được điều đó, tất cả những gì bạn phải làm là chỉ định copying constructor một cách tường mình và đặt nó bên trong phần private của lớp.
Bất kỳ nỗ lực để sử dụng copying constructor (cho dù ngầm định hoặc tường minh) đều sẽ gây ra một lỗi biên dịch.
Chương trình sau →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> using namespace std; class Dummy { private: Dummy(Dummy &source) {} public: Dummy(int value) {} }; void DoSomething(Dummy ob) { cout << "I'm here!" << endl; } int main(void) { Dummy o1(123); Dummy o2 = o1; DoSomething(o1); return 0; } |
sẽ gây ra ít nhất hai lỗi biên dịch. Bạn nên tự mình build chương trình để thấy điều đó.