C ++裸指针范围

时间:2016-11-15 20:10:30

标签: c++

对于原始指针,如果我们不将它用于新的某些数据,那么可以保留原样,或者最好在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;
}

1 个答案:

答案 0 :(得分:3)

您无需将p设置为nullptrNULL)(或释放它),因为p并不拥有它引用的内存。

p指的是std::vector的原始数组。 std::vector将在销毁时清除内存。该记忆的生命周期是mainvec)的持续时间。

函数返回后,将清除p本身(保存内存地址)的堆栈分配内存;函数调用完成后,函数调用堆栈将展开。