普通类,即不是value class 也不是ref class。是C或者C++的类或者其它非托管资源。比如本地类,这种类必须用new创建,而不是gcnew。所以必须释放。要在cli中使用他们,得找个合适的时机释放他们。见代码:
#pragma unmanaged struct __declspec(dllexport) point { double x, y, z; point(double xv, double yv, double zv) :x(xv), y(yv), z(zv){} double getX()const { return x; } double getY()const { return y; } double getZ()const { return z; } ~point() { std::cout << "~point()" << std::endl;; } }; #pragma managed ref struct pointWraper { private: point* dp; public: pointWraper(double x,double y,double z) { dp = new point(x,y,z); } double getX() { return dp->getX(); } double getY() { return dp->getY(); } double getZ() { return dp->getZ(); } ~pointWraper() { this->!pointWraper(); } !pointWraper() { if (dp) delete dp; } };
要及时释放,对托管类使用delete,会调用析构,析构会调用终结器。GC则不会再调用终结器,万一忘记delete,GC则在自动回收垃圾的时候会调用终结器。也会释放非托管资源。