首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#/Java中动态对象的限制

C#/Java中动态对象的限制
EN

Stack Overflow用户
提问于 2013-01-11 17:54:40
回答 3查看 180关注 0票数 1

我基本上是一个想要冒险进入C#的C++用户。从C#的基础教程中,我碰巧发现所有对象都是动态创建和存储的(对于Java语言也是如此),并且可以通过引用来访问,因此不需要复制构造函数。将对象传递给函数或从函数返回对象时,也不需要按位复制。这使得C#比C++简单得多。

然而,我在某处读到,仅通过引用对对象进行操作会对可以执行的操作类型施加限制,从而限制程序员完全控制。一个限制是程序员不能精确地指定何时可以销毁对象。

有人能详细说明一下其他限制吗?(如果需要,请提供示例代码)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-11 18:12:59

大多数“限制”都是设计上的,而不是被认为是一个缺陷(当然,你可能不同意)

你不能确定/你不必担心

当一个对象是destroyed

  • where的时候,共享对象在内存中,并且它有多大(除非你正在调整外部的application)

  • using指针arithmetic

  • accessing object

  • accessing a object

  • is simpler
  • whether

    or the heap )。(堆栈在内存的Java)

    • fragmentation中的使用越来越多(并非所有收集器都是如此)
票数 2
EN

Stack Overflow用户

发布于 2013-01-11 18:01:55

由于java中的垃圾收集,我们无法预测对象何时会被销毁,但它会执行析构函数的工作。

如果你想释放一些资源,那么你可以使用finally块。

代码语言:javascript
运行
复制
try {


  } finally{
  // dispose resources.     
  }
票数 1
EN

Stack Overflow用户

发布于 2013-01-11 18:20:38

在做了类似的转换之后,你越深入地研究它,你就越需要考虑C#的GC行为,尤其是在试图处理托管代码中的非托管资源时。

This article重点介绍了您可能感兴趣的许多问题。

就我个人而言,我怀念IDisposable (更像是shared_ptr)的引用计数替代品,但这可能是C++背景的后遗症。

我越是需要编写自己的管道来支持像C++这样的编程,我就越有可能忽略了另一种C#机制,或者我最终对C#感到沮丧。例如,据我所见,交换和移动在C#中并不常见,我很怀念它们:其他有C#背景的程序员可能不同意这些习惯用法的用处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14275583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档