【问题标题】:Do i have to dispose a parameter in C#? [duplicate]我必须在 C# 中处理参数吗? [复制]
【发布时间】:2016-11-01 15:27:05
【问题描述】:

我目前使用的 NDA 库(非商业)具有零文档并使用 EMGU。 这是我的问题的示例:

public void example()
{
     Image<Gray,byte> exp = new Image<Gray,byte>(128,128);
     foo(exp);
     exp.Dispose();
}

public bool foo(Image<Gray,byte> bar)
{
     //magic here
     //bar.Dispose() ??
     return true;
}

当我将 EMGU-Image 从一个函数传递到另一个函数时,我是否也必须在被调用函数中调用 .Dispose()?还是在被调用者中调用就足够了?

【问题讨论】:

  • 好问题,但已经详细回答了。标准的经验法则是,如果您创建它,则您有责任处置它(除非双方同意转让所有权)。有关更多详细信息,还请查看参数是如何传递的。像这样的对象在 C# 中是通过引用传递的,因此您不会复制该对象。
  • 还要注意,您应该使用using 关键字来确保调用 exp.Dispose(),即使抛出异常也是如此。
  • @CodyGray 哦,快!但我发誓我多次使用搜索。但也许我只是无法用正确的词搜索它。感谢您的回答(评论)和链接!

标签: c# memory-management memory-leaks emgucv


【解决方案1】:

最好只调用一次Dispose()。但是,如果Dispose() 方法是以“正常方式”编写的,则应该可以多次调用它。

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多