26 lines
		
	
	
		
			607 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			607 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <mrw/smartpointer.hpp>
 | |
| 
 | |
| class A {
 | |
|   public: int a;
 | |
|   protected: virtual void fn() {} // dynamic_cast requires a virtual function
 | |
| };
 | |
| 
 | |
| class B: virtual public A {
 | |
|   public: int b;
 | |
| };
 | |
| 
 | |
| int main(int, char**) {
 | |
|   utl::SmartPointer<int> i1 = new int;
 | |
|   *i1 = 13;
 | |
|   utl::SmartPointer<int> i2 = i1;
 | |
|   utl::SmartPointer<int> i3;
 | |
|   if (!i3) i3 = i2;
 | |
|   *i2 = 666;			// *i1 is now 666 too
 | |
|   utl::SmartPointer<A> b1 = new B;
 | |
|   utl::SmartPointer<B> b2 = b1; // b1 and b2 point to the same instance
 | |
|   b1->a = 0;			// b1->b does not compile
 | |
|   b2->a = 1;
 | |
|   b2->b = 2;
 | |
|   return 0;
 | |
| } // memory is automatically freed
 |