サンプルコード。


$ cat ./ArraySample.cpp
#include <cstdio>
 
static int counter = 0;
 
class Hoge{
public:
  Hoge(){
    foo = counter;
    bar = new int(counter);
    counter++;
    printf("Hoge constructor: %d\n", foo);
  }
  ~Hoge(){
    delete bar;
    printf("Hoge destructor: %d\n", foo);
  }
  int foo;
  int* bar;
};
 
int main(void){
   
  // array
  printf("[before array]\n");
  Hoge a[2];
  printf("[after array]\n");
  printf("\n");
 
  // array of pointer
  printf("[before array of pointer]\n");
  Hoge* b[2];
  printf("[after array of pointer]\n");
  printf("\n");
 
  // new
  printf("[before new]\n");
  b[0] = new Hoge();
  b[1] = new Hoge();
  printf("[after new]\n");
  printf("\n");
 
  // member values
  printf("[0].foo=%d\n", a[0].foo);
  printf("*a[0].bar=%d\n", *a[0].bar);
  printf("[1].foo=%d\n", a[1].foo);
  printf("*a[1].bar=%d\n", *a[1].bar);
  printf("b[0]->foo=%d\n", b[0]->foo);
  printf("*b[0]->bar=%d\n", *b[0]->bar);
  printf("b[1]->foo=%d\n", b[1]->foo);
  printf("*b[1]->bar=%d\n", *b[1]->bar);
  printf("\n");
 
  // destructor
  printf("[before delete]\n");
  delete b[0];
  delete b[1];
  printf("[after delete]\n");
  printf("\n");
 
  return 0;
}

実行結果。


$ g++ ./ArraySample.cpp
$ ./a.out
[before array]
Hoge constructor: 0
Hoge constructor: 1
[after array]
 
[before array of pointer]
[after array of pointer]
 
[before new]
Hoge constructor: 2
Hoge constructor: 3
[after new]
 
[0].foo=0
*a[0].bar=0
[1].foo=1
*a[1].bar=1
b[0]->foo=2
*b[0]->bar=2
b[1]->foo=3
*b[1]->bar=3
 
[before delete]
Hoge destructor: 2
Hoge destructor: 3
[after delete]
 
Hoge destructor: 1
Hoge destructor: 0

tags: c++

Posted by NI-Lab. (@nilab)