aboutsummaryrefslogtreecommitdiff
path: root/src/testallocation.cc
blob: 7d3accc02273b70b2b7981efc68fa8f1e65d001d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "FlexArrayTmpl.H"

struct InnerContainer {
  int num;

  InnerContainer(InnerContainer &src){
    this->num=src.num;
  }
  InnerContainer &operator=(InnerContainer &src){
    if(this==&src) return src;
    this->num=src.num;
    return *this;
  }
  InnerContainer(){
    printf("\tNew InnerContainer %p\n",this); 
    num=-1; /* uninitialized */  
  }
  ~InnerContainer(){
    printf("\tInnerContainer[%p] destruct %d\n",this,num);
  }
};

struct OuterContainer {
  int num;
  FlexArray<InnerContainer> inner;
  OuterContainer(OuterContainer &src){
    this->num=src.num;
    this->inner=src.inner;
  }
  OuterContainer &operator=(OuterContainer &src){
    if(this==&src) return src;
    this->num=src.num;
    this->inner=src.inner;
    return *this;
  }
  OuterContainer(){
    printf("New OuterContainer %lu\n",(unsigned long)this); 
    num=-1;
  }
  ~OuterContainer(){
    printf("OuterContainer[%lu] destruct %d innersize=%u\n",
	   (unsigned long)this,num,inner.getSize());
  }
};

struct Container {
  FlexArray<OuterContainer> outer;
	
  Container(int sz){
    int i,j;
    outer.setSize(sz);
    for(i=0;i<sz;i++){
      OuterContainer o;
      printf("***Outer create [%u]\n",i);
      o.num=i;
      o.inner.setSize(sz);
      for(j=0;j<sz;j++){
	printf("\t***Inner create [%u]\n",j);
	(o.inner[j]).num=j;
      }
      outer[i]=o;
    }
  }
	
  ~Container(){
    printf("Container Destructor outersize=%u\n",outer.getSize());
  }
};

void main(int argc,char *argv[]){
  Container *c;
  puts("new container");
  c = new Container(3);
  puts("CREATED--------(now destroy)");
  delete c;
  puts("DONE");
}