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 ## Initialize Member Variables
...with the member initializer list. ...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 ```cpp
// Bad Idea // Bad Idea
class MyClass class MyClass
@@ -239,11 +241,23 @@ private:
int m_value; 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 // Good Idea
// C++'s member initializer list is unique to the language and leads to // There is no performance gain here but the code is cleaner.
// cleaner code and potential performance gains that other languages cannot
// match.
class MyClass class MyClass
{ {
public: public:
@@ -255,6 +269,21 @@ public:
private: private:
int m_value; 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 In C++11 you may consider always giving each member a default value, e.g. by writing