我没有办法在没有动态内存分配的情况下返回数组。我将用一个例子详细解释它:
动态内存分配:
Device* getConnectedDevices() {
// scan for devices.
Device *connectedDevices = new Device[deviceCount]; // Dynamically allocate memory for the Devices
// Get for each device an ID
return connectedDevices;
}
void doSomething() {
// some code
// I need a list with all the connected devices!!
Device *connectedDevices;
connectedDevices = getConnectedDevices();
// do something with the array
}
doSomething()不知道数组的大小,所以我用一个结构来解决这个问题:
struct deviceArray {
Device* devices;
int deviceCount;
};
没有动态内存分配: 我不知道该怎么做。我尝试了以下事项:
答案 0 :(得分:9)
一般情况下,如果没有动态内存分配,则无法这样做 出现的问题(跟踪大小,正确的释放等)很常见。
您描述的这些问题在c ++中使用container classes和dynamic memory management smart pointers解决。
在您的情况下,使用std::vector<Device>
表示设备列表并隐藏动态内存管理的详细信息和复杂性是合适的。
答案 1 :(得分:3)
您不需要new
任何事情,
std::vector<Device> getConnectedDevices()
{
std::vector<Device> devices;
// Fill `devices' with devices.push_back()
return devices;
}
您可以通过多种不同的方式遍历设备列表,例如使用iterators。
通常你在c ++中根本不需要指针,如果你知道如何使用引用和STL容器,你可以在没有单个指针的情况下做任何你想做的事情。但是有些情况下使用指针确实有意义,但我怀疑这是其中之一。