正确的初始化矢量成员变量的方法

时间:2012-07-30 16:16:07

标签: c++

// 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;
}

问题&GT;初始化类的向量成员变量的正确方法是什么? 我们是否必须对其进行初始化?

4 个答案:

答案 0 :(得分:24)

请参阅http://en.cppreference.com/w/cpp/language/default_initialization

  

默认初始化在以下三种情况下执行:

     
      
  1. 当声明具有自动存储持续时间的变量时没有初始化程序
  2.   
  3. 当具有动态存储持续时间的对象由没有初始化程序的new-expression创建时
  4.   
  5. 当构造函数初始值设定项列表中未提及基类或非静态数据成员且该构造函数被称为时。
  6.         

    默认初始化的效果是:

         
        
    • 如果T是类类型,则调用默认构造函数以提供新对象的初始值
    •   
    • 如果T是数组类型,则数组的每个元素都是默认初始化的。
    •   
    • 否则,什么也没做。
    •   

由于std::vector是类类型,因此调用其默认构造函数。因此不需要手动初始化。

答案 1 :(得分:20)

这取决于。如果你想要一个0号向量,那么你不需要做任何事情。如果你想要一个大小为N的向量填充42s,那么使用构造函数初始化列表:

ClassName() : m_vecInts(N, 42) {}

答案 2 :(得分:4)

从C ++ 11开始,您还可以在类声明中直接使用非静态成员的列表初始化:

class ClassName
{
public:
    ClassName() {}

private:
    std::vector<int> m_vecInts = {1, 2, 3}; // or just {}
}

答案 3 :(得分:1)

您不必显式初始化它,它将在您创建类的实例时创建。