从c++迁移到c#,与指针相关
本文关键字:指针 c++ 迁移 | 更新日期: 2023-09-27 18:15:14
我是c++程序员,我正在做一个迁移项目,我需要将c++代码转换为c#,我对c#知之甚少。
我正在迁移的c++代码有很多指针操作,例如
Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.
我的问题是,
- 如果我在c#中做不安全的编程,只要我正确地跟踪内存,有任何危害吗? 或者c#中是否有其他方法来处理这类指针操作(有时是双指针)。
如果你正在将一个项目从c++移植到c#,你的第一个目标应该是完全保持在安全的托管代码的世界里。仅仅因为你在c++代码中使用了指针并不意味着你必须在c#中做同样的事情。c#中的不安全代码实际上应该是你最后的选择,只有在非常特殊的情况下才需要。
你的例子中的代码在c#中可以像这样,不需要任何指针或不安全的操作。
BaseAddress baseAddress = ...
Hdr->States = (DspState)baseAddress;
或作为类型检查的强制转换操作
Hdr->States = baseAddress as DspState;
c#/. net一直使用引用,它在某种程度上类似于指针,但没有指针算术的危险。
c#授权不安全的上下文,以便允许使用指针,所以如果你的代码在c++中工作,它应该在c#中做得很好,但取决于你想做什么,这不是最好的解决方案。例如,如果你使用c#中存在的c++库,你可能必须在c++中使用指针,但在c#中使用引用。如果你在帖子中显示的那种操作是你唯一使用的,我认为你不应该使用不安全的上下文来引用和解引用指针,你应该对你的代码做一个完整的转换。