On Saturday, 19 March 2022 at 00:05:54 UTC, Salih Dincer wrote:
Greetings to all...
There are nested classes as below. But beware, there's also
inheritance, extra! If you construct ```Bar b``` from main(),
it's okay. But if declare the constructor in Foo(), the program
crashes with a segmentation error.
Is this not legal? Like two mirrors are facing each other, that
I do?
```d
class Foo
{
Bar b;
int i;
this(int n)
{
this.i = n;
//this.b = new Bar(this.i); // compiles but crashes
}
class Bar : Foo
{
int i;
this(int n)
{
this.i = n;
super(this.i);
}
}
}
void main()
{
auto foo = new Foo(1);
auto bar = foo.new Bar(1);
foo.b = bar;
assert(foo.i == foo.b.i);
}
```
SDB@79
That crashes because of the creation of `Bar b` member, which
itself has a Bar b member, which itself...
One solution is to create the member depending on some condition,
example:
```d
if (typeid(this) !is typeid(Bar))
this.b = new Bar(this.i);
```