从c++迁移到c#,与指针相关

本文关键字:指针 c++ 迁移 | 更新日期: 2023-09-27 18:15:14

我是c++程序员,我正在做一个迁移项目,我需要将c++代码转换为c#,我对c#知之甚少。

我正在迁移的c++代码有很多指针操作,例如

Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.

我的问题是,

  1. 如果我在c#中做不安全的编程,只要我正确地跟踪内存,有任何危害吗?
  2. 或者c#中是否有其他方法来处理这类指针操作(有时是双指针)。

从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#中使用引用。如果你在帖子中显示的那种操作是你唯一使用的,我认为你不应该使用不安全的上下文来引用和解引用指针,你应该对你的代码做一个完整的转换。