c ++ - 将对象设置为指向对象类的指针数组

时间:2016-03-08 10:48:28

标签: c++ arrays c++11

我有一个类名MyDate,其中包含以下成员和方法:

class MyDate
{
    public:
        MyDate();
        void setDay(int d);
        void setMonth(int m);
        void setYear(int y);
        void set(int day_, int month_, int year_);
        void print ();

    private:
    int day;
    int month;
    int year;

};

我有另一个类名称Calendar,它有一个指向MyDate的指针数组。

class Calendar 
{
    public:
        Calendar() ;
        void setDate (int num);
        bool isFree(int num_);
        int firstFree();
        void insertDate(MyDate my_date_);

        void print ();

    private:
        std::array<MyDate*, 30> m_dates;

};

我按以下方式实现insert函数:

void Calendar :: insertDate(MyDate my_date)
{
int f = firstFree()-1 ;//the first free index in the array
*m_dates[f]=my_date; //is there a way to implement it without getters from //MyDate class??
}

我知道我不能*m_dates[f]=my_date; ---&gt;只是为了解释我必须实施的内容。 有没有办法实现它没有来自MyDate类的getter?

2 个答案:

答案 0 :(得分:1)

您不能使用*m_dates[f]=my_date;因为数组只有指针,所以您仍然需要为实际对象提供存储空间。如果您可以并且想要使用智能指针(std::array<std::shared_ptr<MyDate>, 30> m_dates;),则可以使用m_dates[f].reset(new MyDate(my_date));,否则您必须处理内存管理。

答案 1 :(得分:0)

首先,您的数组保持指向mydate对象的指针,您必须正确管理数据。如果我查看用于insertDate的接口,insertDate(myDate * my_date)就已经清楚了,你可以使用m_dates [f] = my_date来设置数组的值。您可能必须确保在程序期间设置有效的指针和myData对象是否正确管理,如果您的目的是保持指针。正如C ++ 11中的一条评论中所提到的,您可以利用shared_pointers,因此您无需明确管理内存。