c++ - 如何在类中重新分配指针数组?

标签 c++ arrays object pointers realloc

我有 Citizen 类 { string name,address ... } 然后我有 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<Citizen>而不是数组,问题可能会自行消失。标准容器,如 std::vector自动为您管理所有内存。你最终会得到 no 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而不是数组是完全相同的改进。

关于c++ - 如何在类中重新分配指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439877/

相关文章:

c++ - 模板实例化不 "do inheritance"

java - 我可以通过 JSON 在运行时动态创建 Java 对象吗?

java - 如何将字符串从txt文件转换为java中的不同子字符串

javascript - 如何检查所有属性值是否为真?

javascript - 在 typescript 中使用任何 Prop 定义对象

c++ - 通过 C#/.NET 代码编写可使用的非托管 DLL

c++ - 在 vector <> 中嵌套 vector <> 时出错

C++ 结构 - 错误 1 ​​错误 C2143 : syntax error : missing ';' before '*'

python - Numpy 广播数组

android - 房间;将整数数组存储到单独的表中?