I know about compiler-generated functions, the rule of three and the rule of five. In real-world scenarios, it may not be trivial to figure out exactly which of the compiler-generated functions (constructors, assignment operators, destructor) were actually created by the compiler.
Is there any way to list the compiler-generated functions for a specific class?
I am primarily interested in Visual Studio 2019 and Xcode, but a generic solution would be even more welcome.
The special member functions are class (or struct) member functions that, in certain cases, the compiler automatically generates for you. These functions are the default constructor, the destructor, the copy constructor and copy assignment operator, and the move constructor and move assignment operator.
In C++, the compiler automatically generates the default constructor, copy constructor, copy-assignment operator, and destructor for a type if it does not declare its own. These functions are known as the special member functions, and they are what make simple user-defined types in C++ behave like structures do in C.
When the compiler generates them. In some cases, the compiler won't generate those functions. If you write any of those functions yourself, the compiler won't generate it. That's pretty obvious.
The rules are complicated. I will steal from another answer which quotes a table from Howard Hinnant's presentation.
The moral here is that a good practice is to not rely on compiler implicit declares and explicitly declare every special member (as defaulted or deleted, depending on your needs)
"Is there any way to list the compiler-generated functions for a specific class?"
Of course there is. On Linux (and other Unix systems) you can use nm
, readelf
and objdump
on the generated object files/libraries/executable to disassemble them and inspect any exported symbols (and much more).
There are similar tools on Windows, I know, but that's not a platform I work much with, so unfortunately I cannot name exact tool names there.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With