C#和C ++之间的编组,以及责任的耍弄

时间:2010-09-02 14:22:06

标签: c# .net c++ pointers memory-management

如果我有一个本机C ++函数,根据函数的结果,删除某个指针(delete [])的责任在调用者和函数之间有所不同。我当然会检查返回值并在C ++中采取相应的行动。

问题是,如果函数在C ++和C#之间编组,如果在C#中将指针设置为null就足够了?

2 个答案:

答案 0 :(得分:3)

没有。 C#不能做C ++中的delete []。您必须使用共享内存分配API,或者编写一个处理清理的C ++包装器。

答案 1 :(得分:0)

不,只需将本机代码中分配的指针设置为null,就不会释放内存。 CLR只能垃圾收集它所知道的内存(也称为托管内存)。它不知道本机内存,因此无法收集它。必须显式释放在托管类型中拥有所有权的任何本机内存。

最常见的方法是通过Marshal类上的Alloc和Free函数