ここに書いてあることは「バグの少ないプログラムを書く」ためのものであって,
「実行速度が速いプログラムを書く」ものではありません。
目次
非POD型のメンバ変数は,可能な限りポインタにしない
(コンパイラの最適化がある程度賢いことが前提)
初期化忘れとdelete忘れを防ぐため,
delete忘れを防ぐため,
可能な限りポインタを所持しない。
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
-
|
|
|
|
|
|
|
|
|
-
!
|
|
|
|
!
-
|
|
|
|
|
|
|
|
|
|
|
-
!
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
!
|
|
|
|
-
|
|
|
!
|
|
|
|
!
| #spanend
#spanadd
#spanend
#spanadd
class Angle
#spanend
#spanadd
{
#spanend
#spanadd
public:
#spanend
float rad;
#spanadd
#spanend
Angle():rad(0)
{
}
#spanadd
#spanend
#spanadd
}
#spanend
#spanadd
#spanend
#spanadd
#spanend
#spanadd
class Angle3
#spanend
#spanadd
{
#spanend
#spanadd
public:
#spanend
Angle x;
Angle y;
Angle z;
#spanadd
#spanend
Angle3()
{
}
#spanadd
}
#spanend
#spanadd
#spanend
#spanadd
#spanend
#spanadd
class Angle3_
#spanend
#spanadd
{
#spanend
#spanadd
public:
#spanend
Angle* x;
Angle* y;
Angle* z;
#spanadd
#spanend
Angle3():
x( new Angle() ),
y( new Angle() ),
z( new Angle() )
{
}
#spanadd
#spanend
~Angle3()
{
delete x;
delete y;
delete z;
}
#spanadd
#spanend
#spanadd
}
#spanend
#spanadd
#spanend
#spanadd
|
初期化忘れを防ぐため,なるべく非POD型にする
初期化忘れの例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
-
|
|
|
|
|
-
|
!
!
-
|
|
|
|
|
!
| #include <iostream>
struct Vector3
{
float x;
float y;
float z;
void print()
{
std::cout << x << y << z << std::endl;
}
};
void func
{
Vector3 vec;
vec.x = 1;
vec.y = 0;
vec.print();
}
|
もし,Vector3が非Pod型だったら。
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
|
-
|
|
|
|
|
|
|
|
|
|
|
-
!
|
|
|
|
-
|
!
|
!
-
|
|
|
|
|
|
!
| #spanend
#spanadd
#include <iostream>
#spanend
#spanadd
#spanend
#spanadd
class Vector3
#spanend
#spanadd
{
#spanend
#spanadd
public:
#spanend
float x;
float y;
float z;
#spanadd
#spanend
Vector3():x(0),y(0),z(0)
{
}
#spanadd
#spanend
void print()
{
std::cout << x << y << z << std::endl;
}
#spanadd
};
#spanend
#spanadd
#spanend
#spanadd
void func
#spanend
#spanadd
{
#spanend
Vector3 vec;
vec.x = 1;
vec.y = 0;
vec.print();
#spanadd
}
#spanend
#spanadd
#spanend
#spanadd
|
|