Correct way to initialize vector member variable
C++C++ Problem Overview
// Method One
class ClassName
{
public:
ClassName() : m_vecInts() {}
private:
std::vector<int> m_vecInts;
}
// Method Two
class ClassName
{
public:
ClassName() {} // do nothing
private:
std::vector<int> m_vecInts;
}
Question> What is the correct way to initialize the vector member variable of the class? Do we have to initialize it at all?
C++ Solutions
Solution 1 - C++
See http://en.cppreference.com/w/cpp/language/default_initialization >Default initialization is performed in three situations: > >1. when a variable with automatic storage duration is declared with no initializer >2. when an object with dynamic storage duration is created by a new-expression without an initializer >3. when a base class or a non-static data member is not mentioned in a constructor initializer list and that constructor is called. > > The effects of default initialization are: > >- If T is a class type, the default constructor is called to provide the initial value for the new object. >- If T is an array type, every element of the array is default-initialized. >- Otherwise, nothing is done.
Since std::vector
is a class type its default constructor is called. So the manual initialization isn't needed.
Solution 2 - C++
It depends. If you want a size 0 vector, then you don't have to do anything. If you wanted, say, a size N vector fill of 42s then use the constructor initializer lists:
ClassName() : m_vecInts(N, 42) {}
Solution 3 - C++
Since C++11, you can also use list-initialization of a non-static member directly inside the class declaration:
class ClassName
{
public:
ClassName() {}
private:
std::vector<int> m_vecInts {1, 2, 3}; // or = {1, 2, 3}
}
Solution 4 - C++
You do not have to initialise it explcitly, it will be created when you create an instance of your class.