C++ cli 包装到c++/cli P+> C++/CLI的包装结构是什么?因此,它可以从C++的调用< < /P> < P> C++类BRAH的包装器:
编辑:C++ cli 包装到c++/cli P+> C++/CLI的包装结构是什么?因此,它可以从C++的调用< < /P> < P> C++类BRAH的包装器:,c++-cli,wrapper,C++ Cli,Wrapper,编辑: ref class BlahWrapper { BlahWrapper () { blah = new Blah(); } !BlahWrapper() { //Destructor called by GC if (blah != null) { delete blah; blah = null; } } ~BlahWrapper() { //Dispose() called in "using"
ref class BlahWrapper {
BlahWrapper () {
blah = new Blah();
}
!BlahWrapper() { //Destructor called by GC
if (blah != null) {
delete blah;
blah = null;
}
}
~BlahWrapper() { //Dispose() called in "using" blocks, or manually dispose
if (blah != null) {
delete blah;
blah = null;
}
}
private:
Blah* blah;
}
是否要将非托管类包装在C++/CLI包装器中以供C#使用?或者您只是想使用C++中的C++/CLI类?设置
blah=NULL代码>删除后会很好。GC也需要!blahwraper()
析构函数。!BlahRapper编译为Dispose()。。。。GC使用普通析构函数来销毁对象。。。同样,它正在被删除,变量blah在该行之后将不存在。您所说的“普通析构函数”是什么意思?“!blahwraper”编译成Finalize()
,由GC调用。非托管内存应在中释放!BlahWrapper()
,它是终结器。如果您在析构函数中释放blah,那么将其设置为NULL意味着告诉GC您与blah
无关。当然,您的代码没有错。当且仅当OP删除Blahwraper自己的实例时,它才会正常工作。如果不是,GC永远不会释放本机或非托管资源,在这种特殊情况下blah
指针。