我正在使用ref
并且不清楚“它是像 C/C++ 中的指针还是像 C++ 中的引用?”
为什么我会问你一时想的那么弱的问题?因为,当我阅读 C#/.NET 书籍、msdn 或与 C# 开发人员交谈时,我对以下原因感到困惑:
- C# 开发人员建议不要
ref
在函数的参数中使用,e.g. ...(ref Type someObject)
对他们来说味道不好,他们建议...(Type someObject)
,我真的不太清楚这个建议。我听到的原因:最好使用对象的副本,然后将其用作返回值,而不是通过引用等破坏内存......我经常听到关于数据库连接对象的此类解释。就我普通的 C/C++ 经验而言,我真的不明白为什么在 C# 中使用引用是一件坏事?我控制对象的生命及其内存分配/重新分配等...我在书籍和论坛中阅读的只是建议it's bad, because you can corrupt your connection and cause a memory leak by a reference lose
,所以我控制对象的生命,我可以手动控制我真正想要的,那为什么不好? - 现在阅读不同的书籍并与不同的人交谈,我不清楚是
ref
指针(*
)还是C ++中的引用&
?我记得 C/C++ 中的指针总是分配一个大小为void*
4 字节的空间(有效大小取决于体系结构),其中托管结构或变量的地址。在 C++ 中,通过传递引用&
没有来自堆/堆栈的新分配,并且您在内存空间中使用已经定义的对象,并且没有像普通 C 中那样为外部指针分配内存。那么ref
C# 中的内容是什么?.NET VM 是否像普通 C/C++ 中的指针一样处理它,并GC
为指针分配临时空间,或者它是否像 C++ 中的引用一样工作?做ref
仅适用于正确的托管类型或值类型,例如bool, int
最好切换unsafe
代码并以非托管样式传递指针?