Memory layout changed for classes with virtual functions
Jonathan Wakely
jwakely.gcc@gmail.com
Mon Dec 27 13:53:00 GMT 2010
On 27 December 2010 13:16, ronny meeus wrote:
> On Sun, Dec 26, 2010 at 5:21 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>>
>> You could put the next pointer in a separate struct which has no
>> virtual functions, so it has the same layout in C and C++, then use
>> that as a base class for a polymorphic C++ type. The C code
>> manipulating the next pointer would only deal with the portable type.
>
> I understand this. The problem with this approach is that you force
> your user to introduced an inheritance relationship with the
> baseclass. If this needs to be introduced in an existing class
> hierarchy it can introduce certain complexities.
The code already has horrible, non-portable complexities.
You have the option of replacing them with portable complexity.
>> Or you could create an interface for manipulating the linked lists,
>> compile the implementation as C++, and always modify the lists through
>> that interface.
>
> I do not understand what you mean with an interface.
> In Java we have interfaces but as far as I know, this concept does not
> exists in C++.
> If you mean just a class with abstract interfaces, I do not see what
> the difference is with the base class approach mentioned above.
I don't mean the Java keyword 'interface' I just mean an API which
hides the implementation
http://en.wikipedia.org/wiki/Interface_(computer_science)
You could, for instance, declare functions to manipulate the pointers,
and call those functions to add an a element to the linked list,
instead of fiddling with raw memory everytime you want to manipulate a
list.
More information about the Gcc-help
mailing list