C ++ 11:如何使用nullptr初始化某些类的指针数组?

时间:2016-03-07 17:06:33

标签: c++ c++11 nullptr

我是C ++的新手。我有一个名为MyDate的班级。另外,我有一个名为Calendar的类,它有一个指向MyDate个对象的指针数组的成员类型。我应该如何在nullptr的构造函数中将数组成员声明并初始化为Calendar

2 个答案:

答案 0 :(得分:2)

就个人而言,我可能会这样做:

class Calendar {

/* Methods: */

    Calendar() noexcept
    { for (auto & ptr: m_dates) ptr = nullptr; }

/* Fields: */

    /* Array of 42 unique pointers to MyDate objects: */
    std::array<MyDate *, 42> m_dates;

};

PS:你可能想考虑使用像std::unique_ptrstd::shared_ptr这样的智能指针而不是原始指针。那么你根本不需要在Calendar构造函数中显式初始化它们:

class Calendar {

/* Fields: */

    /* Array of 42 pointers to MyDate objects: */
    std::array<std::unique_ptr<MyDate>, 42> m_dates;

};

编辑:如果没有C ++ 11功能,我会这样做:

class Calendar {

/* Methods: */

    Calendar()
    { for (std::size_t i = 0u; i < 42u; ++i) m_dates[i] = NULL; }

/* Fields: */

    /* Array of 42 unique pointers to MyDate objects: */
    MyDate * m_dates[42];

};

答案 1 :(得分:2)

智能指针默认初始化为nullptr

class Calendar
{
    std::array<std::unique_ptr<Date>, 42> m_dates;
};

否则,std::array是一个聚合,因此空的括号初始化列表将零初始化所有标量字段:

class Calendar
{
    std::array<Date *, 42> m_dates {};
};