如何在类中重新分配指针数组

How to reallocate array of pointers in class?

本文关键字:分配 指针 数组 新分配      更新时间:2023-10-16

我有一个类Citizen{字符串名称,地址…}然后我有一个类TaxRegister。

class TaxRegister
{
public:
    bool Add_citizen ( const string& name, const string& addr );
private:
    static const int m_Size=1000;
    int m_Index,m_IncrementedSize;
    Citizen * m_People[m_Size];
};
bool TaxRegister::Add_citizen( const string& name, const string& addr )
{
....
    m_People[m_Index++] = new Citizen( name,addr ); 
}

问题是,当我必须添加超过1000人到我的数组;

我试过这样做:

Citizen *tmp[m_IncrementedSize*=2];
for (int i=0; i < m_Index; i++ )
    tmp[i]=m_People[i];
delete [] m_People;
m_People=tmp;
m_IncrementedSize*=2;

但是编译器给了我这个:

对' CCitizen* [(((sizetype)) + 1)] '赋值的不兼容类型

有人知道怎么修理它吗?谢谢你。

使用std::vector<Citizen>代替数组,问题可能会自行消失。像std::vector这样的标准容器会自动为您管理所有内存。你最终会得到没有newdelete[] 在你的代码。

为了给你一个概念,这就是你的Add_citizen函数的样子:

void TaxRegister::Add_citizen( const string& name, const string& addr )
{
    m_People.push_back(Citizen(name, addr));
}

您已经使用std::string而不是char const *。这很好。使用std::vector代替数组是完全相同的改进。

如果您想坚持使用数组,只需确保数组声明中的size参数实际上是一个常量,而不是一个变量。然后分配一个新的数组