问题标签 [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.
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^ 的托管引用指针?
c# - CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable 有效吗?
如果我有以下代码:
FxCop 似乎抛出了CA1001错误:
CA1001:Microsoft.Design:在“Foo”上实现 IDisposable,因为它创建了以下 IDisposable 类型的成员:“ManualResetEvent”。
在这种情况下,这似乎无效,因为我正在处理ManualResetEvent
整个using
块。
我在这里遗漏了什么还是规则中有错误?
c# - 一次性使用Using的正确用法
我有这个代码
当我运行 fxcop 和
哪个在分析时没有给出任何 fxcop 规则错误,这两种情况有什么区别,第二种用法是否会造成内存泄漏?使用块的行为不符合我的预期吗?