2010-09-13 6 views
7

Hai dòng mã lạ này có ý nghĩa gì?"= xóa" là gì?

thread_guard(thread_guard const&) = delete; 

thread_guard& operator=(thread_guard const&) = delete; 

Trả lời

11

=delete là tính năng mới của C++ 0x. Nó có nghĩa là trình biên dịch ngay lập tức sẽ ngừng biên dịch và phàn nàn "chức năng này bị xóa" khi người dùng sử dụng chức năng này (Xem thêm: defaulted and deleted functions -- control of defaults của C++ 0x FAQ by Bjarne Stroustrup).

thread_guard(thread_guard const&) là một hàm tạo bản sao và thread_guard& operator=(thread_guard const&) là một hàm tạo bài tập. Do đó, hai dòng này cùng nhau vô hiệu hóa việc sao chép các phiên bản thread_guard.

+1

Hầu như. Việc "sử dụng" của một hàm bị xóa trong một ngữ cảnh không được đánh giá (ví dụ, như biểu thức cho 'decltype') có thể đủ điều kiện như là một lỗi khấu trừ đối số mẫu. Điều này làm cho trình biên dịch chỉ bỏ qua một mẫu. Nó không làm cho trình biên dịch ngừng biên dịch. – sellibitze

10

Cú pháp C++ 0x mới để vô hiệu hóa một số chức năng nhất định của lớp. Xem wikipedia để biết ví dụ. Ở đây bạn đang nói rằng lớp thread_guard không thể sao chép cũng như không thể gán được.

+0

Nó cũng hoạt động với các chức năng khác. – sellibitze