Re: classInstanceSize and vtable

2014-10-24 Thread bearophile via Digitalmars-d-learn

Etienne Cimon:


So what's the point of making a class or methods final?


It forbids subclassing. And final methods are not virtual, so 
they can be inlined.


Bye,
bearophile


Re: classInstanceSize and vtable

2014-10-24 Thread Simen Kjaeraas via Digitalmars-d-learn

On Friday, 24 October 2014 at 00:21:52 UTC, Etienne Cimon wrote:

On 2014-10-23 20:12, bearophile wrote:
In D all class instances contain a pointer to the class and a 
monitor
pointer. The table is used for run-time reflection, and for 
standard

virtual methods like toString, etc.

Bye,
bearophile


So what's the point of making a class or methods final? Does it 
only free some space and allow inline to take place?


Like bearophile said the vtable is required for virtual methods. 
Consider this code:


import std.stdio : writeln;

class A { void foo() {writeln(A);} }
final class B : A { override void foo() {writeln(B);} }

void main() {
A a = new B();
a.foo();
}

In order for the call to foo to run the correct version of foo, B 
needs to have a vtable. Since all classes in D implicitly inherit 
from Object, which has some virtual methods, all classes need to 
have a vtable.


--
  Simen


classInstanceSize and vtable

2014-10-23 Thread Etienne Cimon via Digitalmars-d-learn
I'm trying to figure out the size difference between a final class and a 
class (which carries a vtable pointer).


import std.stdio;

class A { void print(){} }

final class B { void print(){} }

void main(){
writeln(__traits(classInstanceSize, A));
writeln(__traits(classInstanceSize, B));
}


Returns:
8
8

I'm not sure, why does a final class carry a vtable pointer?


Re: classInstanceSize and vtable

2014-10-23 Thread bearophile via Digitalmars-d-learn

Etienne Cimon:


I'm not sure, why does a final class carry a vtable pointer?


In D all class instances contain a pointer to the class and a 
monitor pointer. The table is used for run-time reflection, and 
for standard virtual methods like toString, etc.


Bye,
bearophile


Re: classInstanceSize and vtable

2014-10-23 Thread Etienne Cimon via Digitalmars-d-learn

On 2014-10-23 20:12, bearophile wrote:

In D all class instances contain a pointer to the class and a monitor
pointer. The table is used for run-time reflection, and for standard
virtual methods like toString, etc.

Bye,
bearophile


So what's the point of making a class or methods final? Does it only 
free some space and allow inline to take place?