Có thể cung cấp danh sách trình khởi tạo cho định nghĩa của một mảng tĩnh. Ví dụ:Danh sách trình khởi tạo cho mảng động?
int main()
{
int int_static[2] = {1,2};
}
Danh sách khởi tạo tương tự có thể cho mảng động không?
int main()
{
int* int_ptr = new int[2];
}
Đây là gần gũi hơn với những gì tôi đang cố gắng để làm:
struct foo
{
foo(){}
foo(void * ptr): ptr_(ptr) {}
void * ptr_;
};
int main()
{
foo* foo_ptr = new foo[10];
}
Lúc khởi không phải là constructor mặc định nên được gọi, nhưng foo: foo (void *).
Điểm có danh sách khởi tạo tĩnh cho mảng động có thể hữu ích trong trường hợp biên dịch Just-In-Time cho lõi gia tốc chỉ có số lượng giới hạn stack, nhưng đồng thời bạn xây dựng đối tượng của bạn với một (thời gian biên dịch gia tốc = thời gian chạy máy chủ) danh sách khởi tạo tĩnh.
Tôi giả sử không (vì điều này sẽ yêu cầu trình biên dịch tạo mã bổ sung, cụ thể là sao chép các giá trị của đối số vào vị trí heap). Tôi nghĩ rằng c + + 0x hỗ trợ một số điều này, nhưng tôi không thể sử dụng nó. Ngay bây giờ tôi có thể sử dụng một cấu trúc như vậy. Có thể ai đó biết một thủ thuật ..
Tốt nhất!
Đối với bản ghi, "động" không có nghĩa là "độ dài biến". Nó thực sự là một "tính năng tốt đẹp để có" để có thể tạo một đối tượng động mới và khởi tạo nó thành các nội dung ban đầu đã biết. Đó chính xác là những gì các nhà xây dựng làm cho các đối tượng kiểu lớp và cấu trúc. –
Để làm rõ, 'động' trong C++ có nghĩa là phân bổ trên heap thay vì ngăn xếp. Tôi sử dụng cả hai bộ nhớ lưu trữ rộng rãi, do đó, có danh sách initializer làm việc cho cả hai sẽ cực kỳ thuận tiện. Như là, trong nhiều trường hợp khi tôi muốn tạo một danh sách mảng trên heap, tôi phải dùng đến các đối tượng (như std :: vector) thay vì các mảng đơn giản vì, như @MikeHousky nói, C++ chỉ hỗ trợ khởi tạo các đối tượng trên heap tại thời điểm này, không phải mảng. Không có vấn đề về kỹ thuật hoặc hiệu suất ở đây - chỉ là giới hạn của C++. – holocronweaver