是否有必要在构造函数中初始化私有列表类成员?

时间:2012-05-15 12:51:34

标签: c++

我有一个头文件:

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() {  }

我不确定使用构造函数初始化对象的规则。即使未在构造函数中显式初始化,是否所有私有成员对象都已初始化?另外,我是否需要为列表创建析构函数以删除列表中的对象?

感谢。

4 个答案:

答案 0 :(得分:3)

不,具有默认构造函数的类型默认为值初始化

如果从初始化列表中省略id,则不会对其进行初始化,因为它是int。但是,std::list成员将会。

它与public / private无关。

  

另外,我是否需要为列表创建析构函数以删除列表中的对象?

仅当day是这些对象的所有者时。如果它们是在类之外创建的,并且只是插入类的成员中,则调用上下文可能必须处理销毁。

答案 1 :(得分:1)

不,默认情况下list为空。是否需要删除析构函数中list中的对象的问题取决于您填充列表的方式。如果你插入meetings.insert(new meeting())之类的东西,那么是的,你需要删除析构函数中的对象。

答案 2 :(得分:1)

您不需要初始化std :: list,因为它的默认构造函数将被调用。

我们通常应该初始化以下内容:

  1. 内置类型,如int,float等,否则它们将用垃圾初始化。
  2. 所有其他用户定义的类型,没有任何默认构造函数。

答案 3 :(得分:0)

不,这是不需要的,因为默认构造对你来说足够好。

同样,当你的对象被销毁时,它会破坏列表。但是,我不认为该列表会自动销毁其所有内容,因此您仍需要在析构函数中执行此操作。