Có cách nào an toàn và tiêu chuẩn phù hợp để xử lý một mảng kiểu C dưới dạng mảng std :: mà không sao chép dữ liệu vào mảng std :: mới không?Xử lý mảng c cstyle như std :: array
Điều này rõ ràng không biên dịch, nhưng là hiệu ứng tôi muốn (sử dụng thực sự của tôi phức tạp hơn nhưng mẫu ngắn này sẽ hiển thị những gì tôi muốn làm). Tôi đoán một reinterpret_cast sẽ "làm việc" nhưng có lẽ không an toàn?
#include <array>
int main()
{
int data[] = {1, 2, 3, 4, 5};
// This next line is the important one, treating an existing array as a std::array
std::array<int, 5>& a = data;
}
Dường như dữ liệu phải được lưu trữ giống hệt nhau.
chỉnh sửa: Để rõ ràng, tôi không muốn xóa mảng :: std mới, tôi muốn tham chiếu đến dữ liệu hiện có dưới dạng một.
STL container quản lý bộ nhớ của riêng chúng. Bạn không thể tạo một mảng và có nó quản lý một số mảng mà bạn đã phân bổ ở nơi khác. – krammer
Cho rằng 'std :: array' và' std :: vector' mong muốn quản lý bộ nhớ riêng của chúng, bạn nên cẩn thận khi sử dụng 'reinterpret_cast' mà không thực hiện các bước để đảm bảo chúng không thử và xóa dữ liệu dưới sự kiểm soát của họ. Nhưng điều đó sang một bên ... đừng sợ 'memcpy'. Một thói quen khá hiệu quả của nó, sau khi tất cả. – Rook
Ok cảm ơn. Tôi muốn làm điều này một cách an toàn, không làm một hack, tôi chỉ tự hỏi nếu nó có thể là tất cả :) – jcoder