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
指针。