Tôi hiện đang làm việc trên một số mã C#/C++ sử dụng lời gọi. Trong phía C++ có một std :: vector đầy đủ các con trỏ được xác định bởi chỉ mục từ mã C#, ví dụ như một khai báo hàm sẽ trông như thế này:Có an toàn khi giữ các con trỏ C++ trong C# không?
void SetName(char* name, int idx)
Nhưng bây giờ tôi nghĩ, vì tôi ' đang làm việc với con trỏ tôi không thể gửi đến C# địa chỉ con trỏ bản thân sau đó trong mã tôi có thể làm một cái gì đó như thế này:
void SetName(char*name, int ptr)
{
((TypeName*)ptr)->name = name;
}
Rõ ràng đó là một phiên bản nhanh chóng về những gì tôi nhận được tại (và có lẽ sẽ không biên dịch).
Địa chỉ con trỏ có được đảm bảo giữ nguyên trong C++ sao cho tôi có thể lưu trữ địa chỉ của nó một cách an toàn trong C# hoặc điều này quá không ổn định hoặc nguy hiểm vì một lý do nào đó?
Chỉ cần làm rõ: Bạn biết rằng mã trên sẽ chỉ biên dịch trong C# nếu nó nằm trong khối 'không an toàn'? –