如何在 C++ 初始化列表中初始化指针数组

How to Initialize array of pointers in a c++ Initializer List

我的 class 有一个指针数组(为说明点编辑的代码

class IMX6S::IMX6SAnalogIn : public AP_HAL::AnalogIn {
public:
    IMX6SAnalogIn();

private:
    IMX6S::IMX6SAnalogSource* _channels[2];
};

class IMX6S::IMX6SAnalogSource : public AP_HAL::AnalogSource {
public:
    friend class IMX6S::IMX6SAnalogIn;
    IMX6SAnalogSource(int16_t pin, float initial_value);


};

我想在构造函数的初始化列表中初始化 _channels 数组,所以我尝试了以下操作

IMX6SAnalogIn::IMX6SAnalogIn() :
     _channels{&IMX6SAnalogSource(0,0.0f),&IMX6SAnalogSource(1,0.0f) }
{
}

但是我收到警告 - 在初始化列表中获取临时地址。

这种在初始化列表中初始化数组的方式不正确吗?

注意 - 我不能动态分配内存。一切都必须静态分配。

您可以停止将其设为指针数组,而将其设为对象数组:

std::array<IMX6S::IMX6SAnalogSource, 2> _channels;

IMX6SAnalogIn::IMX6SAnalogIn() :
     _channels{{0,0.0f},{1,0.0f}}
{
}

在不分配内存的情况下,无法使用指针数组执行此操作。那么,您可以使对象直接成为 class 的成员,并将指向它们的指针存储在一个数组中,该数组也是 class 的成员。但这在功能上与上面没有什么不同。