如果其他构造函数创建它,我应该处理通过构造函数传递的对象吗?

时间:2016-12-09 19:08:12

标签: c# class constructor dispose

鉴于以下代码,我应该只在foo类中创建它时处置Bar吗?或者,即使它被传递给构造函数,我是否应该始终处置foo?我想我应该添加另一个私有变量来跟踪Bar创建foo或者是否传递给Bar( Foo foo )构造函数,并且只处理{{1}它是由foo构造函数创建的。

public Bar( string name )

1 个答案:

答案 0 :(得分:2)

你的想法是正确的。

如果您从其他地方传递了Foo的实例,并自行处理它,则可能会破坏仍在使用Foo的代码。如果你创建了Foo的实例但是没有丢弃它,那么你将会不必要地长时间地使用它所消耗的内存。

因此,您最好的选择是跟踪您是否自己创建了实例并将其丢弃(如果是这样)。 (您也可以允许调用者指定行为,如评论中所述。)

(或者,你可以不做任何事情,效率会更低,但至少不会破坏任何东西。唯一可能主动破坏的解决方案就是你处理的是从别处传来。)