1using namespace System; 2public ref class MyClass //自定义引用类型 3{ 4 public: 5 MyClass() //提供无参构造函数,与ISO C++一样,在声明栈对象时如果不传入参数,便会调用无参构造函数。 6 {} 7 8 ~MyClass() //这便是我们的析构器(Destructor) 9 { 10 m_isDisposed = true; 11 } 12 13 String^ GetString() 14 { 15 if(m_isDisposed) 16 { 17 throw gcnew ObjectDisposedException("MyClass is disposed,can not access disposed memery!"); 18 } 19 return "MyClass"; 20 } 21 22 static MyClass^ GetInstance() 23 { 24 MyClass result; //声明一个栈对象 25 return %result; 26 /**//*返回栈对象的追踪句柄(tracking handle),对ISO C++比较熟悉的 27 肯定比我都清楚,在使用该函数的返回值会访问非法内存,因为栈对象被销毁,内存已被回收。然而在C++/CLI并 28 不会这样,使用的情况取决于MyClass类型的实现,如果MyClass实现了Destructor,则编译器会在函数体内给我们加上一些 29 代码,调用myClass对象的Destructor,如果MyClass没有实现Destructor,此时返回值可以正常使用。一下代码为通过Reflector查看的结果, |