我想問你如何在C++中重新分配一個struct
數組?重新分配一個結構數組
在C中有realloc
這是相當不錯的,但不建議在C++中使用它。也許你們中的一些人會告訴我,我不應該使用struct
陣列?
那麼,在這個任務我們不能使用任何STL容器,所以struct
是唯一的選擇,我想。這是爲實踐的問題與分配,重新分配內存和其他東西...
在下面的示例中,我寫了一個代碼,我將如何使用malloc
和realloc
在C中執行它。你能給我一個建議如何在C++中做到這一點。
謝謝。
class CCompany
{
public:
CCompany();
bool NewAccount(const char * accountID, int initialBalance);
struct ACCOUNT
{
char *accID;
int initialBalance;
...
};
ACCOUNT* accounts ;
...
...
private:
int ReallocationStep = 100;
int accountCounter = 1;
int allocatedAccounts = 100;
...
}
CCompany::CCompany()
{
accounts = (ACCOUNT*)malloc(allocatedItems*sizeof(*accounts));
}
bool CCompany::NewAccount(const char * accountID, int initialBalance)
{
// Firstly I check if there is already an account in the array of struct. If so, return false.
...
// Account is not there, lets check if there is enough memory allocated.
if (accountCounter == allocatedAccounts)
{
allocatedAccounts += ReallocationStep;
accounts = (ACCOUNT *) realloc(accounts, allocatedAccounts * sizeof(*accounts));
}
// Everything is okay, we can add it to the struct array
ACCOUNT account = makeStruct(accID, initialBalance);
accounts[CounterAccounts] = account;
return true;
}
如果你不想使用'realloc',當'new'可用時,你應該重新考慮使用'malloc'。你應該爲更大的尺寸執行'new',複製你已有的內容,然後'delete []'。還要非常小心你的'CCompany'類正在接受字符串的指針並將它們存儲爲非擁有的(即不需要拷貝)。 –
是的,當然,而不是malloc我會使用新的,但我不確定與realloc。 –
如果在C++中有一個realloc相當於它會殺死它的蹤跡中的異常安全。分配新內存後,您希望舊數據仍然存在。分配可能會導致代碼處於不一致狀態。你應該分配新的塊,一旦你知道成功了,然後複製到新塊中,然後刪除舊塊。 –