[英]How can I delete an object from a pointer to a pointer array?
我仍然不熟悉C ++中的手動銷毀(來自具有垃圾回收功能的語言)。 我的一門課有以下內容:
Input** Inputs;
初始化如下:
this->Inputs = new Input* [totalInputs];
並可以根據用戶輸入稍后在我的代碼中重新分配,類似於:
this->Inputs[inputNumber] = new DigitalInput(params...)
問題在於,由於釋放舊對象,在該位置重新分配對象時,它很容易發生內存泄漏。
重新分配舊對象后,刪除舊對象的最佳方法是什么?
編輯:我忘了包括在Arduino代碼庫上運行的AVR微控制器上。
編輯2:之所以這樣做,是因為允許用戶將命令發送到將更改輸入類型的單元(即:發送命令,並且this->Inputs[inputNumber] = new AnalogInput(params...)
也是指向指針數組的指針的原因是因為此對象的構造函數將基於傳入的totalInputs
參數生成該數組。這在一個共享庫中使用,該共享庫可在幾個不同的單元上使用。
最好不要使用原始指針,而是使用stl容器。 一種可能的方式如下。
using InputPtr = std::unique_ptr<Input>;
std::vector<InputPtr> Inputs;
Inputs.emplace_back(std::make_unique<DigitalInput>());
無需擔心內存泄漏。 您還有另一個選擇是使用std::shared_ptr
這取決於您打算如何使用InputList。
如果要重新分配數組的成員以指向新對象,則可以首先取消分配舊對象(如果有)。
Input* oldInput = this->Inputs[inputNumber];
delete oldInput;
this->Inputs[inputNumber] = new DigitalInput(params...)
如果要刪除堆中的對象:
for(int i = 0; i < totalInputs; ++i) delete Inputs[i]; delete[] Inputs
for(int i = 0; i < totalInputs; ++i) delete Inputs[i]; delete[] Inputs
;
編輯:如果您使用的是微控制器,則最好在堆棧上分配。
在陣列上定義最大大小。 喜歡:
const int MAX = 5;
Inputs inputs[MAX][MAX];
然后將對象分配給它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.