我在互联网上看到了这段代码,我对此并不了解。任何人都可以帮我翻译吗?构造函数是否已正确定义和初始化?
-b
答案 0 :(得分:0)
代码有一个奇怪的嵌入式评论:
/** accessInt :
int accessInt;
/** acl : acl */
acl* accessListe;
由于存在尝试初始化accessInt
的代码,我假设其声明上方的行只是缺少令牌以关闭注释。
代码缺少acl
的定义。
后两个构造函数的实体尝试初始化accessListe
,但是还有一个名为accessListe
的构造函数参数,它将遮蔽对象成员。重命名参数,或在构造函数体中使用this->accessListe
。
答案 1 :(得分:0)
jxh回答了几个问题,如果不是大多数错误的代码,但我想扩展它并谈论其他一些。默认构造函数特别糟糕,因为它不会尝试使用值构造任何对象。对于保证构造为空字符串的所有std::string
都可以。但是,对于int
,bool
和指针成员,它们都将使用任何值构建。这意味着如果调用此类的默认构造函数,这些值将不会初始化为任何值,并可能导致问题!我们假设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))
这将保存不必要的副本。