How to identify the type of the object being created using the new operator?

Swati Rathi swatirathi@cse.iitb.ac.in
Mon Oct 6 09:28:00 GMT 2014


On Monday 06 October 2014 02:28 PM, Marc Glisse wrote:
> On Mon, 6 Oct 2014, Swati Rathi wrote:
>
>> Statement : A *a = new B;
>>
>> gets translated in GIMPLE as
>> 1. void * D.2805;
>> 2. struct A * a;
>> 3. D.2805 = operator new (20);
>> 4. a = D.2805;
>>
>> A is the base class and B is the derived class.
>> In statement 3, new operator is creating an object of derived class B.
>> By analyzing the RHS of the assignment statement 3, how can we 
>> identify the type (in this case B) of the object being created?
>
> I strongly doubt you can. It is calling B's constructor that will turn 
> this memory region into a B, operator new is the same as malloc, it 
> only returns raw memory.
>
> (If A and B don't have the same size, the argument 20 can be a hint)
>
Argument 20 is the size of class B.
This was obtained only if we knew that object B is created here.
Is this information not stored anywhere else?






More information about the Gcc mailing list