我基本上是一个尝试进入 C# 的 C++ 人。从 C# 的基本教程中,我碰巧发现所有对象都是动态创建和存储的(Java 也是如此)并且可以通过引用访问,因此不需要复制构造函数。在将对象传递给函数或从函数返回对象时,也不需要按位复制。这使得 C# 比 C++ 简单得多。
但是,我在某处读到,仅通过引用对对象进行操作会对可以执行的操作类型施加限制,从而限制了程序员的完全控制。一个限制是程序员无法精确指定对象何时可以被销毁。
有人可以详细说明其他限制吗?(如果需要,提供示例代码)
大多数“限制”都是设计使然,而不是被认为是缺陷(您当然可能不同意)
你无法确定/你不必担心
由于在 java 中完成垃圾收集,我们无法预测对象何时会被销毁,但它执行析构函数的工作。
如果你想释放一些资源,那么你可以使用 finally 块。
try {
} finally{
// dispose resources.
}
进行了类似的转换后,您越深入研究它,您就越需要考虑 C# 在所有情况下的 GC 行为,但最直接的情况除外。在尝试处理托管代码中的非托管资源时尤其如此。
本文重点介绍了您可能感兴趣的许多问题。
就我个人而言,我想念IDisposable的引用计数替代方案(更像 shared_ptr),但这可能是 C++ 背景的宿醉。
我越需要编写自己的管道来支持类似 C++ 的编程,就越有可能存在我忽略的另一种 C# 机制,或者我最终对 C# 感到沮丧。例如,就我所见, swap和move不是 C# 中的常见习语,我很想念它们:其他具有 C# 背景的程序员可能不同意这些习语的有用性。