我有一个带有指针数组的类,它在构造函数中动态分配。该类还具有填充数组的功能。
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对象中。)答案 0 :(得分:0)
使用指向传入项目的指针填充arrayOfPointers的正确方法是什么?
首先,请勿使用原始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);
}
然后,将指针传递给addItem
而不是值,以避免对象切片和生命周期问题:
HolderClass::addItem(int number, std::unique_ptr<ItemClass> item)
{
arrayofPointers[number] = std::move(item);
}