【问题标题】:How to free memory of c++ WinRT classes created in the runtime component如何释放在运行时组件中创建的 c++ WinRT 类的内存
【发布时间】:2016-07-07 22:09:06
【问题描述】:

我是否必须以及如何从已返回到托管 C# 项目的 Windows 运行时组件中创建的类释放内存?

这个问题涉及到类而不是像How to free memory of c++ WinRT value structs 这样的结构

出现以下场景

  1. C++\Runtime 组件方法是从 C# 项目提出的
  2. C++ 类已创建(单个类与其他 C++ 类的集合)
  3. 返回 C++ 类
  4. C# 项目处理数据

我想确保以下类不会造成内存泄漏:https://github.com/cmusphinx/pocketsphinx-wp-demo/blob/master/PocketSphinxRntComp/SpeechRecognizer.h#L32

我(仍然)是释放内存的新手,不知道如何以及何时释放它。有人吗?

【问题讨论】:

  • 它是自动的,停止尝试帮助。

标签: c# windows-runtime c++-cx winrt-component


【解决方案1】:

所有ref 类都是引用计数的,当没有更多的活动引用时将自动释放。由于 .NET 使用垃圾收集器,内存可能不会立即释放。

如果您的应用程序或库中有循环引用,那么对象的引用计数将永远不会达到零并且内存不会被回收(如果所有对象都被管理,.NET 可以处理循环引用,但如果它们不是来自托管世界之外,比如你的 C++ 类)。

您的 C++ 代码是否存在内部内存泄漏是另一个问题。

【讨论】:

  • @peter-torr-msft 感谢您的回答,关于我正在使用的 'ref' 类的好信息。 GC 对我来说并不新鲜,但我找不到关于它的任何关于在 c++ 中创建的对象的信息。再次感谢!
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 2021-09-20
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多