如何在 c# 上创建的 c++ 上释放对象
How to deallocate object on c++ which is created on c#
我创建了一个com可见的c# dll。我有一个工厂方法来创建对象。我可以在 c++ 上使用和创建对象,但似乎该对象没有被解除分配。如何解除分配它们。要清楚起见,请检查代码
-------------------C#------------------------
public interface IFoo()
{
void foo();
}
public class A:IFoo
{
//interface implemented here.
}
public interface IClassFactory
{
IFoo create();
}
public class TestFactory:IClassFactory
{
public IFoo create()
{
return new A();
}
}
--------------------C++-------------------
IClassFactory * ptrClassFactory;
CoInitilize(ptrClassFactory);//
IFoo * mObject = ptrClassFactory->create(); //this object is now garbage colledted //or so ?
// delete mObject; gives error on my case.
永远不要在指向 COM 对象的指针上调用 delete
,因为对象是引用计数的,您应该在 COM 实例上调用 Release()
以释放引用计数 - 然后对象可以根据需要释放其内存/资源
看来你在谈论 COM。由于对象应该从 IUnknown 继承,因此您有 AddRef Release 方法,这些方法正是用于在不再需要对象时使用引用计数来释放对象的内存。
只需调用 release 并在 C# 中实现 release,如果尚未以这种方式实现,则无需执行任何操作。
如果您不是在谈论COM,那么您仍然可以使用COM方式来释放对象。在 C# 中保留引用计数,并添加 C# 函数,C++将调用这些函数来更新对象。当 ref 计数达到零时,C++不再需要该对象,可以丢弃它并留给垃圾回收器。
相关文章:
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在向量中释放指针?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- C++:在被本地字符串捕获后释放或销毁 malloc'd char *?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 如果分配数组引发异常,是否应该释放该数组