Если вы не хотите инициализировать указатели на nullptr
(NULL
или 0
pre-C ++ 11), например:
class A {
A(int c) : b(c), a1(), b1() { }
int b;
A* a1, *a2;
};
, то либо объект, который вы делаетеуказатель на указатель должен существовать в некоторой внешней области видимости, чтобы он жил как минимум до тех пор, пока объект, содержащий указатель, или вы должны использовать new
.
. Вы можете принять A*
установить указатели на:
class A {
A(int c, A* aptr) : b(c), a1(aptr), a2(aptr) { }
...
};
(Вы не можете использовать ссылку для этого, потому что это сделает A
требованием для A
, невыполнимым условием. Вы можете сделатьдополнительный конструктор, который принял ссылку.)
В вашем примере вы пытаетесь использовать int
для инициализации указателя, который не будет работать.Кроме того, если вы создадите объект в своем примере (через new
или что-то еще), вам не хватит памяти, потому что каждый выделенный вами A
будет выделять еще два A
с, и этот цикл будет продолжаться, пока вы не исчерпаетепамять.