初始化对象的指针数组

时间:2012-02-02 06:20:38

标签: c++

所以我有以下代码

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只是随机类。

3 个答案:

答案 0 :(得分:4)

使用std::arraystd::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