繁体   English   中英

没有动态内存分配的C ++返回数组?

[英]C++ return array without dynamic memory allocation?

我没有办法在没有动态内存分配的情况下返回数组。 我将使用一个例子详细解释它:
使用动态内存分配

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;
};

没有动态内存分配:我不知道如何做到这一点。 我尝试了以下事项:

  • 通过引用传递。 问题:我们在扫描前不知道阵列大小。
  • 没有动态内存分配的返回(局部变量)。 问题:对象不再存在(当然)。

通常,如果没有动态内存分配,则无法执行此操作。
出现的问题(跟踪大小,正确的解除分配等)很常见。

您描述的这些问题在c ++中使用容器类动态内存管理智能指针来解决

在您的情况下,使用std::vector<Device>来表示设备列表并隐藏动态内存管理的细节和复杂性是合适的。

你不需要为此做任何new事情,

std::vector<Device> getConnectedDevices()
{
    std::vector<Device> devices;
    // Fill `devices' with devices.push_back()
    return devices;
}

您可以通过多种不同的方式遍历设备列表,例如使用迭代器

通常你在c ++中根本不需要指针,如果你知道如何使用引用和STL容器,你可以在没有单个指针的情况下做任何你想做的事情。 但是有些情况下使用指针确实有意义,但我怀疑这是其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM