Null pointer in __vptr
Ali Çehreli
acehreli at yahoo.com
Sun Nov 21 02:43:12 UTC 2021
On 11/20/21 7:19 AM, frame wrote:
> I think this is true for an object instance. But from an interface
> instance, the object instance must be accessible somewhere?
Everything needed is available from the pointer to a class object (or
interface). There are some offset arithmetic involved to get to the
right vtbl pointer but the pointer of an object cannot be stored
anywhere in the vtbl because there is just one vtbl but very many objects.
> This is also
> how I would read the doc:
>
>> The vtbl[0] entry is a pointer to the corresponding instance of the
>> object.Interface class.
That is from
https://dlang.org/spec/abi.html
What they mean with object.Instance is the following definition I find
e.g. in my /usr/include/dmd/druntime/import/object.d file:
/**
* Information about an interface.
* When an object is accessed via an interface, an Interface* appears
as the
* first entry in its vtbl.
*/
struct Interface
{
TypeInfo_Class classinfo; /// .classinfo for this interface (not
for containing class)
void*[] vtbl;
size_t offset; /// offset to Interface 'this' from Object
'this'
}
So, the first entry is a pointer to that struct.
The ABI document mentions "pointer to instance of TypeInfo" as well,
which is defined in the same object.d as well:
/**
* Runtime type information about a type.
* Can be retrieved for any type using a
* $(GLINK2 expression,TypeidExpression, TypeidExpression).
*/
class TypeInfo
{
// ...
}
Ali
More information about the Digitalmars-d-learn
mailing list