簡體   English   中英

是否有必要在構造函數中初始化私有列表類成員?

[英]Is it necessary to initialize a private list class member in a constructor?

我有一個頭文件:

class day
{
public:
day(int id);
~day();

private:
int id;
std::list<meeting*> meetings;


};

在我的 .cpp 文件中:

#include "day.h"
#include "meeting.h"

day::day(int id) : id(id) {  }

是否有必要將meetings()添加到構造函數的初始化列表中?

day::day(int id) : id(id), meetings() {  }

我不確定使用構造函數初始化對象的規則。 即使沒有在構造函數中顯式初始化,所有私有成員對象是否都會被初始化? 另外,我是否需要為列表創建一個析構函數來刪除列表中的對象?

謝謝。

不,具有默認構造函數的類型默認是值初始化的

如果您從初始化列表中省略id ,它將不會被初始化,因為它是一個int 但是, std::list成員會。

它與public / private無關。

另外,我是否需要為列表創建一個析構函數來刪除列表中的對象?

僅當day是這些對象的所有者時。 如果它們是在類之外創建的,並且只是插入到類的成員中,則調用上下文可能必須處理銷毀。

不, list默認為空。 是否需要在析構函數中刪除list中的對象取決於您如何填充列表。 如果您插入諸如meetings.insert(new meeting())那么是的,您需要刪除析構函數中的對象。

您不需要初始化std::list ,因為將調用其默認構造函數。

我們通常應該初始化以下內容:

  1. 內置類型,如intfloat等,否則它們將被初始化為垃圾值。
  2. 所有其他用戶定義的類型,沒有任何默認構造函數。

不,不需要,因為默認構造對您來說已經足夠了。

同樣,當您的對象被銷毀時,它將銷毀列表。 但是,我不認為該列表會自動銷毀其所有內容,因此您仍然需要在析構函數中這樣做。

暫無
暫無

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

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