构造函数是否在C ++代码中正确定义和初始化?

时间:2015-05-15 21:29:15

标签: c++ constructor initialization definition

我在互联网上看到了这段代码,我对此并不了解。任何人都可以帮我翻译吗?构造函数是否已正确定义和初始化?

-b

2 个答案:

答案 0 :(得分:0)

代码有一个奇怪的嵌入式评论:

/** accessInt :
int accessInt;

/** acl  :   acl */
acl* accessListe; 

由于存在尝试初始化accessInt的代码,我假设其声明上方的行只是缺少令牌以关闭注释。

代码缺少acl的定义。

后两个构造函数的实体尝试初始化accessListe,但是还有一个名为accessListe的构造函数参数,它将遮蔽对象成员。重命名参数,或在构造函数体中使用this->accessListe

答案 1 :(得分:0)

jxh回答了几个问题,如果不是大多数错误的代码,但我想扩展它并谈论其他一些。默认构造函数特别糟糕,因为它不会尝试使用值构造任何对象。对于保证构造为空字符串的所有std::string都可以。但是,对于intbool和指针成员,它们都将使用任何值构建。这意味着如果调用此类的默认构造函数,这些值将不会初始化为任何值,并可能导致问题!我们假设account析构函数清理其分配的内存:

account::~account() { delete accessListe; }

如果使用默认构造函数构造类,则在清除时会发生未定义的行为(默认情况下,accessListe将指向任何内存位)。您应确保默认构造函数(以及所有构造函数)使用正常值初始化所有值:

account::account() : connecte(false), accessInt(0), accessListe(nullptr /* or 0 if you don't have C++11*/) {}

关于后两个构造函数,两者都可以(读取:应该)初始化构造函数初始化列表中的指针accessListe,而不是之后赋值:

account::account(arguments...) : accessInt(someValue), accessListe(new acl(accessInt))

这将保存不必要的副本。