【问题标题】:How to reallocate array of pointers in class?如何在类中重新分配指针数组?
【发布时间】:2014-03-16 16:57:58
【问题描述】:

我有 class Citizen { string name,address ... },然后我有 class 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)]’分配给‘CCitizen* [1000]’时的类型不兼容

有人知道怎么解决吗?谢谢。

【问题讨论】:

  • 只需使用std::vector,这正是它的设计初衷。

标签: c++ arrays object pointers realloc


【解决方案1】:

使用std::vector&lt;Citizen&gt; 而不是数组,问题可能会自行消失。像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 代替数组是完全相同的改进。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 2014-02-18
      • 1970-01-01
      • 2019-04-30
      • 2013-01-07
      • 1970-01-01
      • 2019-06-12
      • 2014-05-16
      相关资源
      最近更新 更多