c++ - 这是关于删除指针的菜鸟问题
问题描述
下面的代码是一个玩具示例,说明我正在尝试做的事情可能会被误导。我相信这是泄漏内存,因为我使用的是新的但没有删除。这是正确的,如果是这样,有没有办法删除主要方法中的泄漏内容?还是在那个时候无法访问?
#include <iostream>
using namespace std;
int* f(){
int* x = new int;
*x = 4;
return x;
};
int main(){
cout << *f();
return 0;
}
解决方案
诀窍是将返回的指针值捕获到一个变量中,以便您可以在 main() 中多次引用它。像这样:
int main(){
int * ptr = f();
cout << *ptr;
delete ptr;
return 0;
}
(旁注:最好返回一个int
按值代替,但在需要动态分配要返回的对象的情况下(例如,当您想使用运行时多态性时),您应该通过 a 返回分配的对象智能指针而不是原始/C风格的指针。这样你就不必记住delete
返回的对象,因此你不会忘记这样做并导致内存泄漏)
推荐阅读
- python - 当我尝试 docker-compose up 时无法执行脚本 docker-compose
- docker - 如何在 Docker Compose 中修复此无效类型错误?
- jquery-select2 - Select2 在输入之外创建重复标签列表
- python - Python Cmd:试图从函数返回一个值,但在赋值之前告诉它正在被引用
- python - 将数据从 csv 插入 Postgres 表时出错
- android - Airbnb Epoxy 中未显示简单的 TextView
- c - 从 C 运行 shell 脚本并想要获取由 shell 脚本设置的环境变量的值
- java - 如何读取 azure blob 存储中的文件更改?
- java - 服务器不在 Eclipse 上运行
- asp.net - 尝试在 DataView 中添加日期条件过滤器