1) can I avoid giving definition of the default constructor?
Elaborate what fo you want. If you do not define any constructor, default constructor will be generated for you.
In C++11 you can explicitely state that you want compiler-generated constructor by using:
1 2 3 4
class foo
{
public:
foo() = default;
2) can I put the default constructor under "private" section?
Yes, but there is little reason to do so.
If you do not want to have default constructor removed and uncallable, use foo() = delete;
In your case default constructor is generated by compiler and you are using it.
To explicitely state that you are fine with compiler generated version, you can use
Yes it will because default constructor is one of the special member functions and you are using it in your code. I fact you do stated that you want default constructor to be generated on line 53 where it was used first time.