This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

g++ generates code for constructors and destructors several times


Hello,
I have a question about code generated by g++.
When compiling a C++ class, even as simple as the one below,
the code for the constructor is instantiated twice and the code for the 
destructor is instanciated twice or three times.
===== myclass.cpp =====
class MyClass
{
 MyClass();
 virtual ~MyClass();
};
MyClass::MyClass() {}
MyClass::~MyClass() {}
===== /myclass.cpp =====
I look at what this piece of code generates with:
g++ -S -o - myclass.cpp | less
And I can see the constructor twice.
The two functions _ZN7MyClassC2Ev and _ZN7MyClassC1Ev have exactly the same 
code.
The destructor is present three times.
The functions _ZN7MyClassD2Ev, _ZN7MyClassD1Ev and _ZN7MyClassD0Ev have code 
that is almost the same.
As the destructor is virtual, there is a virtual table which contains only 
_ZN7MyClassD1Ev and _ZN7MyClassD0Ev. The third instance of the destructor code 
(_ZN7MyClassD2Ev) doesn't appear in the virtual table.
If I remove the virtual keyword to make the class non-polymorphic, the 
constructor is still compiled twice, as well as the destructor.
Would anyone have the patience to explain me why the constructors/destructors 
are compiled several times ?
Thanks,
Lénaïc.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

AltStyle によって変換されたページ (->オリジナル) /