Classes, Structs and Enums

Implicitly-Defined Default Constructors

When does the compiler implicitly define a default constructor for a class?

Abstract art representing computer programming

In C++, a default constructor is a constructor that can be called with no arguments. The compiler will implicitly define a default constructor for a class if:

  1. The class has no user-defined constructors at all.
  2. All data members of the class have a default constructor (or are built-in types).

For example:

class Player {
  int health_;
  std::string name_;
};

Player p1; // OK, implicit default constructor

However, if we define any constructor for the class, the compiler will no longer provide an implicit default constructor:

class Player {
 public:
  Player(int health) : health_{health} {}

 private:
  int health_;
  std::string name_;
};

Player p1;       // Error, no default constructor
Player p2{100};  // OK, using defined constructor

In this case, if we still want a default constructor, we need to define it explicitly:

class Player {
 public:
  Player() = default;  
  Player(int health) : health_{health} {}

 private:
  int health_;
  std::string name_;
};

// OK, using defaulted default constructor
Player p1;

So remember: if you define any constructors for a class, and you want a default constructor, you need to define it explicitly (either by writing it or by using = default).

Answers to questions are automatically generated and may not have been reviewed.

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 125 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved