作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基本上我有几个函数是这样的:
class MyClass
{
void foo()
{
using (SomeHelper helper = CreateHelper())
{
// Do some stuff with the helper
}
}
void bar()
{
using (SomeHelper helper = CreateHelper())
{
// Do some stuff with the helper
}
}
}
假设我可以在每个函数中使用相同的资源而不是不同的[实例],在清理方面是否可以实践?:
class MyClass
{
SomeHelper helper = CreateHelper();
// ...foo and bar that now just use the class helper....
~MyClass()
{
helper.Dispose();
}
}
最佳答案
不,不 添加析构函数 (Finalizer)。
您可以重用该资源,但您的类必须实现 IDisposable
。
sealed class MyClass : IDisposable
{
SomeHelper helper = CreateHelper();
// ...foo and bar that now just use the class helper....
//~MyClass()
public void Dispose()
{
helper.Dispose();
}
}
现在您必须在 using block 中使用 MyClass
实例。它本身已成为一个托管资源。
析构函数是没有用的,每当收集 MyClass 实例时,关联的帮助程序对象也将在同一个集合中。但是拥有一个析构函数仍然会产生相当大的开销。
standard pattern对于 IDisposable 使用 virtual void Dispose(bool disposing)
方法,但是在制作类 sealed
时,您可以使用上面的简约实现。
关于c# - 在每个函数中使用语句 -> 通过适当的清理转换为类字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231661/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!