C++ 在函数中填充指针数组

C++ 在函数中填充指针数组,c++,arrays,pointers,inheritance,arduino,C++,Arrays,Pointers,Inheritance,Arduino,我有一个带有指针数组的类,指针数组在构造函数中动态分配。此类还具有填充数组的函数 HolderClass::HolderClass(int number) { arrayOfPointers = new ItemClass*[number]; } HolderClass::addItem(int number, ItemClass item) { arrayofPointers[number] = &item; } 尽管这会编译,但我的理解是正确的,因为我实际上会用悬空指针填

我有一个带有指针数组的类,指针数组在构造函数中动态分配。此类还具有填充数组的函数

HolderClass::HolderClass(int number)
{
  arrayOfPointers = new ItemClass*[number];
}

HolderClass::addItem(int number, ItemClass item)
{
  arrayofPointers[number] = &item;
}
尽管这会编译,但我的理解是正确的,因为我实际上会用悬空指针填充数组,因为item变量的生存期仅在addItem函数的持续时间内

用指向传入项的指针填充ArrayOfPointer的正确方法是什么?这里的一个复杂性是ItemClass的子类将被传递给addItem函数,因此我不相信可以使用默认的复制构造函数

编辑:这段代码是为Arduino编写的,所以我对能做什么和不能做什么都很有限。这也意味着我希望只为这个类的用户保留一些东西(因为有很多Arduino新手),而不需要他们传入指向addItem函数的指针(这需要他们管理传入的ItemClass对象的生命周期)

用指向传入项的指针填充ArrayOfPointer的正确方法是什么


首先,不要使用原始
new
delete
。使用容器和智能指针

struct HolderClass
{
    std::unique_ptr<std::unique_ptr<ItemClass>[]> arrayOfPointers;
    // ...
};

HolderClass::HolderClass(int number)
{
     arrayOfPointers = std::make_unique<std::unique_ptr<ItemClass>[]>(number);
}

“使用容器和智能指针。”为什么不使用
std::vector
呢?默认情况下,vector在Arduino上也不可用。您可以通过第三方库访问它,但如果我不必降低代码大小,我宁愿不走这条路。为了更接近OP的设计。不幸的是,在Arduino上通常没有std的内容,因此我需要一个更基本的解决方案。
HolderClass::addItem(int number, std::unique_ptr<ItemClass> item)
{
    arrayofPointers[number] = std::move(item);
}