【发布时间】:2017-05-30 10:40:05
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
void em(vector<int>* pv );
int main()
{
vector<int>* pv = NULL;
em(pv);
printf("%d %d", (*pv)[0], (*pv)[1]); // Error!
}
void em(vector<int>* pv)
{
vector<int> V;
pv = &V;
V.push_back(1);
V.push_back(2);
printf("%d %d\n", V[0], V[1]);
// 1 2 OK!
}
我知道向量是动态分配。 但是,当函数结束时,内存似乎被释放了。 我想使用指针来使用在另一个函数中的函数内声明的向量。 我该怎么办?
【问题讨论】:
-
使用
std::vector<int> em()并返回向量。 (N)RVO 将删除看似副本的内容。 -
或者传递对 em 的引用。
-
我需要从函数 A 创建一个向量并在 B 中使用该向量。所以我尝试使用指针进行通信。
-
@StackQ 您不需要使用指针,只需返回向量本身,如果您担心性能,请打开编译器优化并查看输出程序集以确保对象未被复制.顺便说一句,如果你愿意允许传递一个 ptr,你有什么反对在
main而不是em的范围内创建向量?