C++ 裸指针作用域

标签 c++

对于裸指针,如果我们不使用它来new一些数据,那么是可以保持原样还是在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;
}

最佳答案

你不需要将p设置为nullptr(NULL)(或者释放它),因为p 不拥有它引用的内存。

p 指的是 std::vector 的原始数组。 std::vector 将在销毁时清理该内存。该内存的生命周期是 main (vec) 的持续时间。

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

关于C++ 裸指针作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40618809/

相关文章:

c++ - 多个应用程序之间的数据库状态

java - 更改 shared_ptr 的 getCPtr() 可见性

c++ - 在 C++ 中将字符串插入 AVL 树?

c++ - 对象指针 vector 返回奇数

c++ - 如何在C++中使用另一个类的成员变量?

C++:使用结构或枚举来重载构造函数之间的区别?

c++ - CMAKE 在子目录之间共享变量

c++ - C++ 是否存在循环列表的标准实现?

c++ - 在 C++ 中有 &func 或 class::func 的用途吗?

c++ - Eclipse CDT 编辑器是否支持 altivec C++ 扩展?