サンプルコード。
$ 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)