Trang tài liệu
Khóa học C++ nền tảng
Chương 13. Idiom trong C++
Non-Copyable

Non-Copyable

Đặc ngữ non-copyable (không sao chép) là một mẫu thiết kế C++ ngăn các đối tượng bị sao chép hoặc gán. Nó thường được áp dụng cho các lớp quản lý tài nguyên, như xử lý tệp hoặc ổ cắm mạng, nơi sao chép đối tượng có thể gây ra sự cố như rò rỉ tài nguyên hoặc xóa hai lần.

Để làm cho một lớp không thể sao chép được, bạn cần xóa hàm tạo bản sao và toán tử gán bản sao. Điều này có thể được thực hiện rõ ràng trong phần khai báo lớp, giúp các lập trình viên khác hiểu rõ rằng việc sao chép là không được phép.

Đây là một ví dụ về cách áp dụng đặc ngữ không thể sao chép cho một lớp:

class NonCopyable {
public:
  NonCopyable() = default;
  ~NonCopyable() = default;
 
  // Xóa hàm tạo bản sao
  NonCopyable(const NonCopyable&) = delete;
 
  // Xóa toán tử gán bản sao
  NonCopyable& operator=(const NonCopyable&) = delete;
};

Để sử dụng đặc ngữ này, chỉ cần kế thừa từ lớp NonCopyable:

class MyClass : private NonCopyable {
  // MyClass hiện không thể sao chép được
};

Điều này đảm bảo rằng mọi nỗ lực sao chép hoặc gán các đối tượng của MyClass sẽ dẫn đến lỗi biên dịch, do đó ngăn chặn hành vi không mong muốn.