我基本上是一个想要冒险进入C#的C++用户。从C#的基础教程中,我碰巧发现所有对象都是动态创建和存储的(对于Java语言也是如此),并且可以通过引用来访问,因此不需要复制构造函数。将对象传递给函数或从函数返回对象时,也不需要按位复制。这使得C#比C++简单得多。
然而,我在某处读到,仅通过引用对对象进行操作会对可以执行的操作类型施加限制,从而限制程序员完全控制。一个限制是程序员不能精确地指定何时可以销毁对象。
有人能详细说明一下其他限制吗?(如果需要,请提供示例代码)
发布于 2013-01-11 18:12:59
大多数“限制”都是设计上的,而不是被认为是一个缺陷(当然,你可能不同意)
你不能确定/你不必担心
当一个对象是destroyed
or the heap )。(堆栈在内存的Java)
发布于 2013-01-11 18:01:55
由于java中的垃圾收集,我们无法预测对象何时会被销毁,但它会执行析构函数的工作。
如果你想释放一些资源,那么你可以使用finally块。
try {
} finally{
// dispose resources.
}
发布于 2013-01-11 18:20:38
在做了类似的转换之后,你越深入地研究它,你就越需要考虑C#的GC行为,尤其是在试图处理托管代码中的非托管资源时。
This article重点介绍了您可能感兴趣的许多问题。
就我个人而言,我怀念IDisposable (更像是shared_ptr)的引用计数替代品,但这可能是C++背景的后遗症。
我越是需要编写自己的管道来支持像C++这样的编程,我就越有可能忽略了另一种C#机制,或者我最终对C#感到沮丧。例如,据我所见,交换和移动在C#中并不常见,我很怀念它们:其他有C#背景的程序员可能不同意这些习惯用法的用处。
https://stackoverflow.com/questions/14275583
复制相似问题