我有一个头文件:
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() { }
我不确定使用构造函数初始化对象的规则。即使未在构造函数中显式初始化,是否所有私有成员对象都已初始化?另外,我是否需要为列表创建析构函数以删除列表中的对象?
感谢。
答案 0 :(得分:3)
不,具有默认构造函数的类型默认为值初始化。
如果从初始化列表中省略id
,则不会对其进行初始化,因为它是int
。但是,std::list
成员将会。
它与public
/ private
无关。
另外,我是否需要为列表创建析构函数以删除列表中的对象?
仅当day
是这些对象的所有者时。如果它们是在类之外创建的,并且只是插入类的成员中,则调用上下文可能必须处理销毁。
答案 1 :(得分:1)
不,默认情况下list
为空。是否需要删除析构函数中list
中的对象的问题取决于您填充列表的方式。如果你插入meetings.insert(new meeting())
之类的东西,那么是的,你需要删除析构函数中的对象。
答案 2 :(得分:1)
您不需要初始化std :: list,因为它的默认构造函数将被调用。
我们通常应该初始化以下内容:
答案 3 :(得分:0)
不,这是不需要的,因为默认构造对你来说足够好。
同样,当你的对象被销毁时,它会破坏列表。但是,我不认为该列表会自动销毁其所有内容,因此您仍需要在析构函数中执行此操作。