簡體   English   中英

如何在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方法,這些方法正是用於在不再需要使用對象上的引用計數時釋放該對象的內存的目的。

只需調用發布和在C#中實現發布(如果尚未以這種方式實現)就什么也不做。

如果您不是在談論COM,那么您仍然可以使用COM釋放對象的方式。 在C#中保留引用計數,並添加C ++將調用以更新對象的C#函數。 當引用計數達到零時,C ++不再需要該對象,可以將其丟棄並留給垃圾收集器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM