在函数中填充指针数组

时间:2017-06-06 15:51:30

标签: c++ arrays pointers inheritance arduino

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

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

HolderClass::addItem(int number, ItemClass item)
{
  arrayofPointers[number] = &item;
}

即使这会编译也是我的理解正确,因为我实际上会使用悬空指针填充数组,因为item变量的生命周期仅适用于addItem函数的持续时间?

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

编辑:这段代码是针对Arduino的,所以我在能做什么和不能做什么方面都相当有限。这也意味着我想简单地为这个类的用户保留东西(因为有很多Arduino新手)并且不要求他们传入指向addItem函数的指针(这将要求他们管理传递的生命)在ItemClass对象中。)

1 个答案:

答案 0 :(得分:0)

  

使用指向传入项目的指针填充arrayOfPointers的正确方法是什么?

首先,请勿使用原始newdelete。使用容器和智能指针。

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

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

然后,将指针传递给addItem而不是值,以避免对象切片和生命周期问题:

HolderClass::addItem(int number, std::unique_ptr<ItemClass> item)
{
    arrayofPointers[number] = std::move(item);
}