簡體   English   中英

c++ - 將對象設置為指向對象類的指針數組

[英]c++ - set object to array of pointers to the class of the object

我有一個類名 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;

};

我通過以下方式實現插入功能:

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; ---> 只是為了解釋我必須實現的內容。 有沒有辦法在沒有 MyDate 類的 getter 的情況下實現它?

你不能使用*m_dates[f]=my_date; 因為數組只有指針,所以你仍然需要為實際的對象提供存儲空間。 如果您可以並且想要使用智能指針數組( std::array<std::shared_ptr<MyDate>, 30> m_dates; ),您可以使用m_dates[f].reset(new MyDate(my_date)); ,否則你必須照顧內存管理。

首先,您的數組保持指向 mydate 對象的指針,您必須正確管理數據。 如果我查看用於 insertDate 的接口,insertDate(myDate *my_date) 就很清楚了,您可以簡單地使用 m_dates[f]=my_date 將值設置為數組。 如果您打算保留指針,您可能必須確保在程序和 myData 對象期間設置有效的指針得到正確管理。 正如在 C++11 中的一條評論中提到的,您可以利用 shared_pointers 這樣您就不必顯式管理內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM