Kaiyakha
Kaiyakha

Reputation: 1913

Practical difference between implicit and defaulted constructor in C++

As far as I know, in C++ default constructors are declared (and defined if needed) implicitly if there is no user-defined default constructors. However, a user can declare a default constructor explicitly with the default keyword. In this post the answers are mainly about the difference between the implicit and default terms, but I didn't see an explanation about whether there is some difference between declaring a constructor as default and not declaring it at all.

As an example:

class Entity_default {
    int x;
public:
    Entity_default() = default;
}

class Entity_implicit {
    int x;
}

In the example above, I declare a constructor for Entity_default as default and let the compiler declare a default constructor implicitly for Entity_implicit. I assume I do call these constructors later on. Is there any difference between these constructors in practice?

Upvotes: 1

Views: 105

Answers (1)

Homer512
Homer512

Reputation: 13310

To the best of my knowledge, there is no functional or theoretical difference, both are still "trivial."

Uses of an explicit default constructors:

  1. To ensure it exists when it would not otherwise be created, i.e. if a different constructor exists
  2. You can default it in a different compilation unit:

Header file:

struct Foo
{
    std::string bar;
    Foo() noexcept;
    ~Foo();
};

Source file:

Foo::Foo() noexcept = default;
Foo::~Foo() = default;

Useful if you don't want an inline constructor to save code size or ensure ABI compatibility. Note that at this point, it is no longer a trivial object.

Upvotes: 2

Related Questions