Tôi biết trong C++/CLI người ta không thể sử dụng các loại không được quản lý khi xác định một lớp học quản lý:Tại sao cấu trúc không được quản lý không phải là thành viên của một lớp được quản lý?
public struct Unmanaged
{
int x;
int y;
};
public ref class Managed
{
int one;
Unmanaged two; //error C4368
};
Tôi không hiểu tại sao mặc dù. Unmanaged
chỉ đơn giản là một tập hợp các kiểu gốc - kích thước của nó được biết, chắc chắn nó (và nó có nghĩa là khối bộ nhớ định nghĩa nó) sẽ được di chuyển xung quanh với 'khối bộ nhớ' là Managed
bên trong 'vùng được quản lý' và bất kỳ phần bù nào được lưu trữ trong siêu dữ liệu sẽ vẫn hợp lệ, phải không? Cũng giống như một số nguyên hoặc một phao được khai báo?
Tại sao chúng tôi không thể kết hợp các loại?
Bạn mong đợi ai có thể trả lời một câu hỏi như vậy một cách có thẩm quyền? – ildjarn
@ildjarn tốt, tôi đã chỉ đi kiểm tra mã nguồn C++/CLI và viết một câu trả lời hay ... owait –
Tôi sợ tôi không hiểu; ai đó có nhiều kiến thức về hoạt động C++/CLI hơn tôi? Khi thiết kế trình biên dịch, ai đó chắc chắn đã có giả định rằng tôi khẳng định trong bài viết của tôi (hoặc giả định là hoàn toàn sai!), Và sau đó nhận ra rằng đối với một số điều kiện nó không đúng, do đó lỗi - tôi chỉ tò mò về điều kiện đó là gì. Trong bài đăng trên blog, Tony đã liên kết nó đã được giải thích rằng việc phân bổ các kiểu gốc trên heap được quản lý không được phép ngăn người khác lạm dụng pin_ptr để trả về các 'phiên bản' đó thành mã không được quản lý. – sebf