对于原始指针,如果我们不将它用于新的某些数据,那么可以保留原样,或者最好在c ++中设置为NULL吗?在调用函数process_data后,是否会释放此指针p本身(地址)的物理内存?
#include<vector>
void process_data(std::vector<double> & vec)
{
double *p;
p= vec.data();
// do something with p
// do we have to set p to NULL here?
}
int main()
{
std::vector<double> vec(10);
process_data(vec);
return;
}
答案 0 :(得分:3)
您无需将p
设置为nullptr
(NULL
)(或释放它),因为p
并不拥有它引用的内存。
p
指的是std::vector
的原始数组。 std::vector
将在销毁时清除内存。该记忆的生命周期是main
(vec
)的持续时间。
函数返回后,将清除p
本身(保存内存地址)的堆栈分配内存;函数调用完成后,函数调用堆栈将展开。