正在初始化对象的指针数组

Initializing a pointer array of objects

本文关键字:指针 数组 对象 初始化      更新时间:2023-10-16

所以我有以下代码

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

使用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 s值的数组:

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

创建一个常量,而不是幻数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:
};

我确实记得读过这样的文章:

UserDB():_accounts(){}

这应该将内容初始化为NULL