![]() |
new foo и new foo() |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | struct boo { float x; }; struct foo { int x; int y; boo z; }; int main() { foo* f1 = new foo; // 1 foo f2; // 2 foo* f3 = new foo(); // 3 foo f4 = foo(); // 4 return 0; } |
Разница состоит в том, что в первом и втором случаях все внутренности базового типа не инициализируются, а в третьем и четвертом — инициализируются нулями. | ||
Это, однако, не относится к внутренностям базового типа родительского класса, если в дочернем классе объявлен конструктор по умолчанию. Для родительских типов играет роль лишь то, каким образом они будут представлены в списке инициализации конструктора по умолчанию дочернего класса. |
0 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 | struct base { int a; }; struct foo : base { int x; }; struct boo : base { int x; boo { } }; struct zoo : base { int x; zoo : base() { } }; int main() { foo* f1 = new foo; // foo::base::a = ? foo f2; // foo::base::a = ? foo* f3 = new foo(); // foo::base::a = 0 foo f4 = foo(); // foo::base::a = 0 boo* b1 = new boo; // foo::base::a = ? boo b2; // foo::base::a = ? boo* b3 = new boo(); // foo::base::a = ? boo b4 = boo(); // foo::base::a = ? zoo* z1 = new zoo; // foo::base::a = 0 zoo z2; // foo::base::a = 0 zoo* z3 = new zoo(); // foo::base::a = 0 zoo z4 = zoo(); // foo::base::a = 0 return 0; } |
|
Статистика |
|