簡體   English   中英

C ++指針向量

[英]C++ Vector of pointers

對於我最新的CS作業,我需要創建一個名為Movie的課程,其中包括標題,導演,年份,評級,演員等。

然后,我需要讀取一個包含此信息列表的文件,並將其存儲在指向電影的指針向量中。

我不確定最后一行是什么意思。 這是否意味着,我讀取文件,創建多個Movie對象。 然后創建一個指針向量,其中每個元素(指針)指向其中一個Movie對象?

我只做兩個向量 - 一個指針和一個電影,並對這兩個向量進行一對一的映射?

它意味着這樣的事情:

std::vector<Movie *> movies;

然后在讀取行時添加到向量:

movies.push_back(new Movie(...));

完成向量后,請記住刪除所有Movie*對象。

據我所知,你創建了一個Movie類:

class Movie
{
private:
  std::string _title;
  std::string _director;
  int         _year;
  int         _rating;
  std::vector<std::string> actors;
};

有這樣的類,你創建一個矢量實例:

std::vector<Movie*> movies;

因此,您可以將任何電影添加到電影收藏中。 由於您正在創建指向電影的指針向量,因此不要忘記釋放電影實例分配的資源,或者您可以使用一些智能指針自動取消分配電影:

std::vector<shared_ptr<Movie>> movies;

我不確定最后一行是什么意思。 這是否意味着,我讀取文件,創建多個Movie對象。 然后創建一個指針向量,其中每個元素(指針)指向其中一個Movie對象?

我猜這是預期的。 意圖可能是你讀取一部電影的數據,用new分配一個對象,用數據填充對象,然后將數據的地址推送到vector (可能不是最好的設計,但很可能是預期的無論如何)。

通過使用new Movie()動態分配Movie對象,您將獲得指向新對象的指針。 電影不需要第二個矢量,只需存儲指針即可訪問它們。 就像Brian寫的那樣,矢量將被定義為

std::vector<Movie *> movies

但請注意,向量將不會刪除您的對象,這將導致內存泄漏。 它可能與你的作業無關,但通常你應該刪除所有指針,當你不再需要它們時。

暫無
暫無

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

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