问题标签 [ca1001]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
602 浏览

garbage-collection - 为什么 GC 不会自动处置我班级的成员?

当我在 VS2008 中构建以下 C++/CLI 代码时,会显示代码分析警告 CA1001。

警告:CA1001:Microsoft.Design:在“B”上实现 IDisposable,因为它创建了以下 IDisposable 类型的成员:“A”。

要解决此警告,我必须将此代码添加到 B 类:

但我不明白为什么。A 类通过其析构函数(和终结器)实现 IDisposable。
因此,当 A 被垃圾回收时,肯定会调用 A 的终结器或析构函数,从而释放其非托管资源。

为什么 B 必须添加一个析构函数才能在其 A 成员上调用“删除”?
如果 B 显式调用“删除 m_a”,GC 是否只会调用 A 的析构函数?


编辑:如果您使用声明 A 成员的“语法糖”方法,这似乎会自动工作,如下所示:

但这并不总是可能的。

一旦没有其他人拥有指向它的指针,为什么 GC 不够聪明地自动处理 A^ 的托管引用指针?

0 投票
4 回答
3150 浏览

c# - CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable 有效吗?

如果我有以下代码:

FxCop 似乎抛出了CA1001错误:

CA1001:Microsoft.Design:在“Foo”上实现 IDisposable,因为它创建了以下 IDisposable 类型的成员:“ManualResetEvent”。

在这种情况下,这似乎无效,因为我正在处理ManualResetEvent整个using块。

我在这里遗漏了什么还是规则中有错误?

0 投票
1 回答
43 浏览

c# - 一次性使用Using的正确用法

我有这个代码

当我运行 fxcop 和

哪个在分析时没有给出任何 fxcop 规则错误,这两种情况有什么区别,第二种用法是否会造成内存泄漏?使用块的行为不符合我的预期吗?