I have a simple question:
class my
{
};
my ob;
Compiler allows me to create an object which makes sense. And, I am aware that you can't create object where the constructor is private.
To me it looks that, everything inside the class is private
but obviously not the default constructor(because it is allowing me to create the object as default constructor should be public
). But what confuses me is that there is no public
section in the class.
So, does it create a public
section only to put a default constructor under it in this case?
Or there is something else going on and my rationale is incorrect?
Also, how are accesses public, private and protected internally organised/tracked when an object is created/accessed?
I got this question as I never created an object of an empty class until now.
If you do not declare any constructor yourself, C++ compilers will always generate a public trivial constructor for you. More than that even, it will also implicitly create a public copy constructor and assignment operator.
From C++11 standard 12.1.5:
and 12.8.7, 12.8.11:
and finally 12.8.18, 12.8.20, 12.8.22:
Note that a move assignment operator will only be generated under certain circumstances, which are beyond the scope of this question, see 12.8.20 for more details.
If you want a private constructor you have to declare it yourself:
If you want to prevent the generation of copy constructor or assignment operator you can either declare, but not implement them:
Or, since C++11, explicitly delete them: