gpt4 book ai didi

c++ - 按值返回指针集合

转载 作者:行者123 更新时间:2023-11-27 22:56:51 25 4
gpt4 key购买 nike

我有一个库函数,它创建并返回(按值)指向堆上某些对象的指针 vector 。这在我使用 C++ 时效果很好,但现在我需要导出这个函数,以便它可以与 C 链接,我对如何以干净的方式实现这一点感到困惑。

我第一次天真的尝试如下:

airport_t **listAiportsByCode(const char *code) {
vector<airport_handle*> airports;
// Fill up vector with pointer to airports on the heap ...
airports.push_back(nullptr);
airport_t** c_airports = airports.data();
return c_airports;
}

这显然行不通,因为 airports vector 是堆栈分配的。

我是否需要在堆上分配一个数组,并简单地记录该数组在使用后需要删除?

airport_t **listAiportsByIATA(const char *iata) {
vector<airport_handle*> airports;
// Fill up vector with airports ...
airports.push_back(nullptr);
airport_t* c_airports = new airport_t*[BUFFER];
std::copy(airports.begin(), airports.end(), c_airports);
return c_airports;
}

我习惯于用高级语言编程,对于这样一个微不足道的功能来说,这似乎是一个太丑陋的设计。

最佳答案

为了处理内存,我认为您唯一的选择是分配数组并让客户端整理它或让客户端分配数组。

不使用 vector 并直接写入数组也可能更简洁?

为客户端分配数组:

airport_t **listAiportsByIATA(const char *iata) {

airport_t** c_airports = new airport_t*[BUFFER];

// Fill up vector with airports ...
for (airport_t** airport = c_airports; airport < c_airports + BUFFER; ++airport) {
*airport = nullptr;
}

return c_airports;
}

客户端分配数组:

void listAiportsByIATA(const char *iata, airport_t ** c_airports, int maxSize) {

// Fill up vector with airports ...
for (airport_t** airport = c_airports; airport < c_airports + maxSize; ++airport) {
*airport = nullptr;
}

}

关于c++ - 按值返回指针集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com