所以我有以下代码
class UserDB
{
private:
AccountInfo* _accounts[200] ; // store up to 200 accounts
public:
UserDB();
virtual ~UserDB();
}
UserDB::UserDB(){
//code for initializing it to null
}
UserDB::~UserDB(){
delete [] _accounts;
}
所以基本上我试图找到这个代码来初始化_accounts
为null但是我找不到真正的答案,互联网上的所有指南都说如何初始化数组,对象或指针,但不是完全三个的东西,更不用说如何将这种指针初始化为null,即使它们正在初始化[在指南中]看起来也很混乱,所以我再次来这里寻求帮助。
此外,AccountInfo
只是随机类。
答案 0 :(得分:4)
使用std::array
或std::vector
。
你没有delete[]
_accounts
,因为数组是值 - 它是一个指针数组。 IOW,它的大小不等于指针。
这是std::vector
方法:
class UserDB {
private:
std::vector<AccountInfo*> _accounts;
public:
UserDB() : _accounts(200, 0) {}
virtual ~UserDB() {}
};
但是,您可能更喜欢使用向量的默认初始值设定项,以便您可以使用它来确定它拥有的帐户数。
根据以下评论进行更新:
虽然有理由持有AccountInfo*
指针数组,但您也可以考虑std::vector
来保存AccountInfo
个值数组:
class UserDB {
private:
std::vector<AccountInfo> _accounts;
public:
UserDB() : _accounts() {}
virtual ~UserDB() {}
void appendAccountInfo(const AccountInfo& info) {
this->_accounts.push_back(info);
}
};
std::vector
将为您处理所有分配和重新分配需求。它也很好,因为它可以动态调整大小,并且你不会被限制在固定数量的AccountInfos
。
答案 1 :(得分:2)
创建一个常量而不是幻数200(不是真的有必要,但它会使代码在以后更改时更具可读性和安全性)
const int numberOfAccounts = 200;
AccountInfo* _accounts[numberOfAccounts]
UserDB::UserDB()
{
for (int i = 0; i < numberOfAccounts; ++i)
{
_accounts[i] = 0;
}
}
现在你有200个归零指针。
也有习惯在课程结束时把私人成员放在公共场合的开端, 特别是通过更大的课程,你想先看到公共的东西,通常是私人的东西 不想让别人搞砸。
class C
{
public:
protected:
private:
};
答案 2 :(得分:0)
我确实记得读过这会有用:
UserDB():_accounts(){}
这应该将内容初始化为NULL