我有一个类名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?
答案 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,因此您无需明确管理内存。