Reputation: 60371
Consider the following:
template <class T>
struct myclass
{
using value_type = T;
constexpr myclass() = default;
constexpr myclass(const myclass& other) = default;
constexpr myclass(const myclass&& other) = default;
T value;
};
myclass<int> x;
initialize the integer at 0
?myclass<std::vector<int>> x;
what does the default move constructor do? Does it call the move constructor of the vector?Upvotes: 7
Views: 7317
Reputation: 141554
They aren't equivalent to any function bodies. There are small but significant differences between the three cases: = default
, allowing implicit generation, and the nearest equivalent function body.
The following links explain in more detail:
I couldn't find a good link about copy-constructor; however similar considerations as mentioned in the other two links will apply.
myclass<int> x;
does not set value
to 0
.
The defaulted move-constructor (if you made it a non-const reference) moves each movable member (although I think there is a special case where if there is a non-movable base class, weird things happen...)
Upvotes: 7