2

我有一个头文件:

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

4 回答 4

3

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

如果你id从初始化列表中省略,它不会被初始化,因为它是一个int. 但是,std::list会员会。

public它与/无关private

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

仅当day是那些对象的所有者。如果它们是在类之外创建的,并且只是插入到类的成员中,那么调用上下文很可能必须处理破坏。

于 2012-05-15T12:52:33.547 回答
1

不,list默认为空。是否需要删除listin 析构函数中的对象的问题取决于您如何填充列表。如果您插入类似meetings.insert(new meeting())then yes 的内容,则需要删除析构函数中的对象。

于 2012-05-15T12:52:38.350 回答
1

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

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

  1. 内置类型,如intfloat,否则它们将被初始化为垃圾值。
  2. 所有其他用户定义的类型,它们没有任何默认构造函数。
于 2012-05-15T12:58:54.023 回答
0

不,不需要,因为默认构造对您来说已经足够了。

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

于 2012-05-15T12:52:49.313 回答