g ++ 4.7 hỗ trợ khởi tạo thành viên mảng và tôi bắt đầu chơi với nó.khởi tạo thành viên mảng của người dùng xác định loại
Mã bên dưới không biên dịch.
struct A
{
A(int){};
A(const A&) = delete;
A& operator=(const A&) = delete;
~A(){};
};
struct B
{
B():
a{{0},{1}}
{};
A a[2];
};
B b;
Các thông báo lỗi với gcc 4.8 (phát hành trước) là:
n.cc: In constructor ‘B::B()’:
n.cc:12:20: error: use of deleted function ‘A::A(const A&)’
a{{0},{1}}
^
n.cc:4:8: error: declared here
A(const A&) = delete;
^
Có cách nào để làm cho công việc mã này? Tôi không thể dễ dàng thay đổi các contructors, destructor của A. Tôi dường như cần một di chuyển-constructor hoặc copy-constructor để khởi tạo mảng, nhưng điều này có vẻ phản trực giác, vì tất cả tôi thực sự muốn là tại chỗ xây dựng.
Nó hoạt động nếu tôi chia một [2] thành 2 thành viên a0 và a1 và tạo riêng chúng. Điều này có vẻ cá tanh.
':' trong một hàm tạo sử dụng các hàm tạo bản sao để gán các giá trị và bạn xóa nó trong A do đó cho bạn một lỗi. –