When a class or struct in C++ has compiler-provided or explicitly defaulted special member functions, then it is a trivial type. It occupies a contiguous memory area. It can have members with different access specifiers.
Trivial types have a trivial default constructor, trivial copy constructor, trivial copy assignment operator and trivial destructor. In each case, trivial means the constructor/ operator/ destructor is not user-provided and belongs to a class that has :
- No virtual functions or virtual base classes,
- No base classes with a corresponding non-trivial constructor/operator/destructor
- No data members of class type with a corresponding non-trivial constructor/operator/destructor
The following examples show trivial types :
/*Since there are no explicit constructors, there exists a default constructor*/ struct Trivial {
int i;
private :
int j;
}; /* In Trivial2 structure, the presence of the Trivial2(int a, int b) constructor requires
that you provide a default constructor. For
the type to qualify as trivial, we must
explicitly default that constructor.*/
struct Trivial2 {
int i;
Trivial2( int a, int b)
{
i = a;
}
Trivial2() = default ;
}; |
Reference : https://msdn.microsoft.com/en-us/library/mt767760.aspx