Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумАртПаттерныАнтипаттерныТест-драйвВопрос-ответКнигорецензииСправочная

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;
}

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

Тепловая пушка по хорошей цене. Пишем курсовые работы по программированию для разных двоечников.. клей герметик. поздравления с годом свиньи. новогодние подарки 2009. Низкие цены часы по доступным ценам