Clarifying performance in POD vs other in initializer lists.

This commit is contained in:
Olivia
2017-05-31 01:53:14 +02:00
parent 2bbcaf6eb6
commit f894e14e12

View File

@@ -225,6 +225,8 @@ It also makes it possible to have two separate files next to each other on one s
## Initialize Member Variables
...with the member initializer list.
For POD types, the performance of an initializer list is the same as manual initialization, but for other types there is a clear performance gain, see below.
```cpp
// Bad Idea
class MyClass
@@ -239,11 +241,23 @@ private:
int m_value;
};
// Bad Idea
// This leads to an additional constructor call for m_myOtherClass
// before the assignment.
class MyClass
{
public:
MyClass(MyOtherClass t_myOtherClass)
{
m_myOtherClass = t_myOtherClass;
}
private:
MyOtherClass m_myOtherClass;
};
// Good Idea
// C++'s member initializer list is unique to the language and leads to
// cleaner code and potential performance gains that other languages cannot
// match.
// There is no performance gain here but the code is cleaner.
class MyClass
{
public:
@@ -255,6 +269,21 @@ public:
private:
int m_value;
};
// Good Idea
// There is a performance gain here because the default constructor
// for m_myOtherClass is never called.
class MyClass
{
public:
MyClass(MyOtherClass t_myOtherClass)
: m_myOtherClass(t_myOtherClass)
{
}
private:
MyOtherClass m_myOtherClass;
};
```
In C++11 you may consider always giving each member a default value, e.g. by writing