Correct way to initialize vector member variable

前端 未结 4 571
忘了有多久
忘了有多久 2021-01-30 02:16
// Method One
class ClassName
{
public:
    ClassName() : m_vecInts() {}

private:
    std::vector m_vecInts;
}

// Method Two
class ClassName
{
public:
    C         


        
相关标签:
4条回答
  • 2021-01-30 02:45

    You do not have to initialise it explcitly, it will be created when you create an instance of your class.

    0 讨论(0)
  • 2021-01-30 02:53

    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.

    0 讨论(0)
  • 2021-01-30 03:01

    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) {}
    
    0 讨论(0)
  • 2021-01-30 03:07

    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}
    }
    
    0 讨论(0)
提交回复
热议问题