On Monday, 6 May 2019 at 14:48:56 UTC, faissaloo wrote:
misunderstood how allocation works when instantiating a struct that uses alias this:

alias this has no effect on allocation at all. All it does is if

x.y

doesn't compile, it rewrites it to

x.alias_this.y

(or if f(x) doesn't work, it tries f(x.alias_this) too, same idea though.)

That's all it does; it is a way to simplify access to or through a member.

So the allocation doesn't factor into it.

Or is base definitely part of the allocation of Child on the heap?

It is definitely part of the Child allocation. But if you are passing it to a function, keep in mind it still works as a struct.

void foo(Base b) {}

auto child = new Child();

foo(child);


That gets rewritten into

foo(child.base);

which is passed by value there, unlike classes where it is all references. So that might be a source of confusion for you.

Reply via email to