Phi*_*len 0 c++ pointers arduino destruction
我仍然不熟悉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>());
Run Code Online (Sandbox Code Playgroud)
无需担心内存泄漏。您必须使用的另一个选项std::shared_ptr
取决于您打算如何使用InputList。