![](/img/trans.png)
[英]how can I value initialize private struct member of class via initialization list of constructor in c++?
[英]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
,因為將調用其默認構造函數。
我們通常應該初始化以下內容:
int
、 float
等,否則它們將被初始化為垃圾值。不,不需要,因為默認構造對您來說已經足夠了。
同樣,當您的對象被銷毀時,它將銷毀列表。 但是,我不認為該列表會自動銷毀其所有內容,因此您仍然需要在析構函數中這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.