c++ - 在函数中填充指针数组

标签 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 对象中)。

最佳答案

What would be the correct way of populating the arrayOfPointers with pointers to the passed in items?

首先,不要使用原始的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);
}

关于c++ - 在函数中填充指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44394619/

相关文章:

c++ - 为什么用于 C++ 中的 sort() 、 max_element() 函数等 STL 函数的 lambda 函数需要两个参数作为输入?

javascript - 如何将 JavaScript 对象转置为键/值数组

c - 在 Fortran77 子例程中传递 C 指针

c - 仅使用指针来打印数组的内容

c++ - 尝试将数组大小调整为 -1

c++ - 确保模板函数不会对某些类型采用特定的 if-else-branch

c++ - 捕获 cin 异常

c - 使用指向 struct C 的指针分配数组并返回该数组

html - 在 HTML 表格中显示的 Highcharts

c++ - 指向对象和继承对象的指针数组