Tôi không thể hiểu lý do đằng sau việc bổ sung tự động các ctors mặc định. Đặc biệt, tôi thấy rất lúng túng khi mỗi lần tôi chỉ cần thêm một trình hủy ảo rỗng và không có gì nữa, tôi làm mất đi các thứ, nhưng thêm chúng tôi mất bản sao và các thứ mặc định, vì vậy tôi sẽ thêm tất cả đoạn mã này :Tại sao ctor di chuyển mặc định và gán không được trình biên dịch thêm vào khi một destructor được định nghĩa?
virtual ~SomeClass(){} // you are the guilty!
//virtual ~SomeClass() = default // would be the same
SomeClass(SomeClass&&) = default; // no more auto-added
SomeClass& operator=(SomeClass&&) = default; // no more auto-added
SomeClass(const SomeClass&) = default; // but with the moves defined,
SomeClass& operator=(const SomeClass&) = default; // I'm now missing the copy
SomeClass(){} // and the default as well
Tôi chắc chắn có lý do khiến lớp học của tôi xấu và cho phép tôi mong muốn macro xấu, tôi chỉ muốn biết cảm giác thoải mái hơn.
Đó là cách nó chỉ định để hành xử. Xem ví dụ [tham chiếu này] (http://en.cppreference.com/w/cpp/language/move_constructor). –
Thay vì thêm một dtor ảo mặc định hoặc rỗng, bạn có thể chỉ đơn giản là lấy được từ một lớp có một dtor ảo. 'struct make_polymorphic {virtual ~ make_polymorphic() = mặc định; }; '[Live example] (http://coliru.stacked-crooked.com/a/133459bcc0677b22) – dyp
Hài hước. Khi tôi sử dụng các lớp đa hình (tức là với một destructor ảo), tôi có xu hướng không có bản sao hoặc di chuyển, bởi vì tôi cuối cùng sử dụng những thứ bằng cách tham khảo anyway. –