gpt4 book ai didi

c++ - 在不复制缓冲区和内存泄漏的情况下返回指向 vector 数据的指针

转载 作者:行者123 更新时间:2023-11-28 01:48:31 27 4
gpt4 key购买 nike

问题应该很简单,但我不是 C++ 程序员。

假设我有一个 std::vector 填充了一些东西作为函数中的局部变量。我想要做的是返回指向该数据的指针并从该函数计数,而不是 vector 本身(因为它使用另一种语言,而不是 C++)。那么最好的方法是什么?

我打赌我可以用 new 关键字声明 vector ,但是当我稍后在它的 pointer data 上调用 free() 时,会不会有泄漏?

我也可以 malloc() 新缓冲区,将 vector 的缓冲区复制到其中并返回新的缓冲区,但我希望我能避免这种情况。

最佳答案

您可以使用 std::vector<T>& 声明您的函数作为参数并仅返回 vector.count() (参见 Pass by reference in C++)。后来,在客户端代码中将一个空的构造 vector 传递给该函数。

要获取指向原始数据的指针,您可以使用 &vector[0]&vector.front() .从C++11开始,vector中新增了一个成员函数: data() , 它返回容器中初始元素的地址。

一般来说,不要使用不必要的malloc/free操作并在不必要时避免使用堆分配。考虑智能指针而不是原始指针和make_shared/make_unique而不是明确的 new .

关于c++ - 在不复制缓冲区和内存泄漏的情况下返回指向 vector 数据的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892508/

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