Ví dụ dưới đây, tôi ngạc nhiên khi thấy rằng mặc dù hàm khởi tạo mặc định bị xóa (hoặc được tạo mặc định cho vấn đề đó), vẫn có thể khởi tạo tổng hợp.Khởi tạo tổng hợp không duy trì quyền truy cập của hàm tạo
#include <iostream>
struct DefaultPrivate
{
const int n_;
static const DefaultPrivate& create();
private:
DefaultPrivate() = delete;
};
const DefaultPrivate& DefaultPrivate::create()
{
static DefaultPrivate result{10};
return result;
}
int main() {
DefaultPrivate x; //Fails
DefaultPrivate y{10};//Works
return 0;
}
Mối quan hệ giữa cấu hình mặc định riêng tư (hoặc đã xóa) và khởi tạo tổng hợp không được chỉ định trong tiêu chuẩn?
Đây là trường hợp trên cả hai GCC 6.3 và VCC 2017
Lý do tôi đặt ra câu hỏi, là tôi hy vọng rằng việc thay đổi quyền truy cập vào các nhà xây dựng mặc định sẽ ngăn chặn công tổng khởi
Xin lỗi, tôi đã nhận thấy và sẽ xóa phần đó. Tôi đã sửa đổi tệp h và vì một lý do nào đó tệp cpp của tôi không biên dịch lại –