C# 是否删除我的(非托管)指针还是我需要手动执行此操作?

问题描述 投票:0回答:1

前言:我主要了解C++,但对C#和垃圾收集不太了解。 我正在尝试创建一个 C++ 类,将其导出到 dll,然后以 C# 形式使用它。 使用 JaredPar 的答案here 作为模板。

我导入了构造函数和析构函数

[DllImport("CppDll.dll")]
public static extern IntPtr seqGen_Create();

[DllImport("CppDll.dll")]
public static extern void seqGen_Delete(IntPtr seqPtr);

并使用

创建一个实例
IntPtr seqPtr = seqGen_Create();

现在我的 C++ 内存泄漏感觉很刺痛,因为我创建了一个对象但没有调用

seqGen_Delete(IntPtr seqPtr)

C# 是否会为我执行此操作(即使是在 dll 对象中),还是我需要手动执行此操作?

如果是手动的,表单关闭时是否有一个函数被调用?似乎是放置它的合乎逻辑的地方。

编辑:艾蒂安回答了这个问题 - 不,C# 不适合我这样做。通过更多搜索,我发现没有任何地方定义在表单关闭时运行的函数,但您可以创建一个函数并将其与 FormClosed 事件绑定。这就是我调用 seqGen_Delete() 的地方。

c# dll garbage-collection
1个回答
0
投票

当你有

c#
时,在
DLLMain
中这样做有什么意义?
我建议在完成该过程和
dll
事件后卸载
DLL_PROCESS_DETACH

© www.soinside.com 2019 - 2024. All rights reserved.