[英]how to safely reallocate memory in C++ for char *array (it's for CustomString class)
[英]How to reallocate array of pointers in class?
我的課程為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;
但是編譯器給了我這個:
將“公民* [[((((sizetype))+ 1)]”分配給“公民* [1000]”時類型不兼容
有人知道如何解決嗎? 謝謝。
使用std::vector<Citizen>
而不是數組,問題可能會自行消失。 像std::vector
這樣的標准容器會自動為您管理所有內存。 您最終將在代碼中完全沒有new
和delete[]
。
只是為了給您一個想法,這就是您的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參數實際上是常量,而不是變量。 然后分配一個新數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.