//  File: des10b.C
//
//  The dangers of destructors, part 10 version b
//
//  Using reference parameters and reference return values solves
//  our problems on (most ?) compilers.

#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "record2.h"


Record& foo(Record& T) {
   Record *Rptr ;

   Rptr = new Record("R") ;

   printf("\nIdentify T: ") ;
   T.id() ;

   printf("\nIdentify *Rptr: ") ;
   Rptr->id() ;

   return *Rptr ;
}


main() {
   Record S("S") ;
   char *str1, *str2 ;

   printf("Identify S: ") ;
   S.id() ;

   printf("\nDo Assignment\n") ;
   Record& P = foo(S) ;
   printf("Finished Assignment\n\n") ;

   str1 = strdup("Hello") ;
   printf ("str1=(%p,\"%s\")\n", str1, str1) ;

   str2 = strdup("World") ;
   printf ("str2=(%p,\"%s\")\n", str2, str2) ;
   
   printf("Identify S: ") ;
   S.id() ;

   printf("Identify P: ") ;
   P.id() ;

   delete &P ;
   printf("\n\nEnd of main()\n\n") ;
}
