【发布时间】:2014-05-30 20:02:41
【问题描述】:
成分:
- 两种语言——例如 C++ 和 C#
- 一种方式比具有两个成员(字段
x和y)的Point更复杂
在 C# 中,此类类型将被定义为引用类型,强制它始终在堆上分配它。在 C++ 中,分配是按用途定义的,而不是按类型定义,因此可以在堆栈上分配。
这样做的好处是 RAII 模式,具有在对象超出范围后自动清理数据的效果。在 C# 中,您必须使用 using 作为明确的“清理范围”(这也是由于非确定性 GC)。
我知道的第二个是速度——堆栈访问速度更快。
我的问题是——与总是在堆上(如 C# )?
真实的 -- 更可取的是,我正在寻找“始终在堆上”方法不可用的东西,因为 RAII 毕竟是用不同的语法解决的。
本题不涉及C#中的值类型(结构体)!是跨语言比较。
【问题讨论】:
-
问题是,RAII 是一个包罗万象的好东西。您还没有提到异常安全,即带有异常的 RAII(假设代码在某个级别的 try 块中运行)。
-
@juanchopanza,谢谢,但它已经基于 RAII,我指出了 C# 世界中的对应物。
标签: c# c++ heap-memory stack-memory