s****A 发帖数: 80 | 1 我的理解是
1. new 开辟出来的内存必须由delete来回收
但是所delete的指针变量并不一定是new时所使用的指针变量,只要是指相同一个内存
地址的指针变量就可以
比如 int *a=new int;
a=100;
int * b=a;
delete b;
这样就不会造成内存泄露了,并不一定要delete a;对吗?
2.在用new开辟数组所需内存的时候,编译器是不是还要记住指针变量所对应的开辟内
存大小
比如 int *a=new int[100];
... ...
delete [] a;
这里a存放的只是一个内存地址,但是应该有某种机制记住了a之后是一片大小为100的
内存区域,否则就没办法用delete语句收回这些内存了吧
但是在这种情况下,是否就只能通过delete [] a来释放了?不能像 1 中的情况那样用
别的指针变量释放这片内存了?
谢谢! |
w****a 发帖数: 710 | 2 1. 你可以delete b,不一定要delete a。但是记得delete b之后别调用a了。不然野指
针访问就够你喝一壶的。
2. 也可以通过别的指针变量去delete。 |
s****A 发帖数: 80 | 3 1.关于野指针,一般的做法是不是
delete b;
a=NULL; b=NULL;
?
2. 你的意思是我也可以
int *a=new int[100];
... ...
int *b=a;
delete [] b;
效果是一样的?
【在 w****a 的大作中提到】 : 1. 你可以delete b,不一定要delete a。但是记得delete b之后别调用a了。不然野指 : 针访问就够你喝一壶的。 : 2. 也可以通过别的指针变量去delete。
|
w****a 发帖数: 710 | 4 对啊,野指针问题在C++里很纠结。如果你在程序里全写裸指针的话,保证每次删除后
都NULL其实不够的。有时候你在不同对象里,有一个释放了,另一个还拥有所有权。那
还是容易出错。要么保证设计上不互相依赖,要么用类似shared_ptr的东西。
第二个一样的。
【在 s****A 的大作中提到】 : 1.关于野指针,一般的做法是不是 : delete b; : a=NULL; b=NULL; : ? : 2. 你的意思是我也可以 : int *a=new int[100]; : ... ... : int *b=a; : delete [] b; : 效果是一样的?
|
o****d 发帖数: 2835 | 5
动态分配的空间不关编译器的事
那是内存管理做的 在heap中 当然它需要记住动态开辟的内存块的大小
【在 s****A 的大作中提到】 : 1.关于野指针,一般的做法是不是 : delete b; : a=NULL; b=NULL; : ? : 2. 你的意思是我也可以 : int *a=new int[100]; : ... ... : int *b=a; : delete [] b; : 效果是一样的?
|
w**z 发帖数: 8232 | 6 快上Java 贼船。
【在 w****a 的大作中提到】 : 对啊,野指针问题在C++里很纠结。如果你在程序里全写裸指针的话,保证每次删除后 : 都NULL其实不够的。有时候你在不同对象里,有一个释放了,另一个还拥有所有权。那 : 还是容易出错。要么保证设计上不互相依赖,要么用类似shared_ptr的东西。 : 第二个一样的。
|
p*****2 发帖数: 21240 | 7
严重同意。scala也行。
【在 w**z 的大作中提到】 : 快上Java 贼船。
|
K**********g 发帖数: 118 | 8 楼主, wwzz和二爷说的并不是玩笑话。
看样子你也不是用过很多年c++的人,放弃c++也没什么可惜的。把你现在花在学习c++
上的精力,花在java上更值得。
【在 s****A 的大作中提到】 : 我的理解是 : 1. new 开辟出来的内存必须由delete来回收 : 但是所delete的指针变量并不一定是new时所使用的指针变量,只要是指相同一个内存 : 地址的指针变量就可以 : 比如 int *a=new int; : a=100; : int * b=a; : delete b; : 这样就不会造成内存泄露了,并不一定要delete a;对吗? : 2.在用new开辟数组所需内存的时候,编译器是不是还要记住指针变量所对应的开辟内
|
s**x 发帖数: 7506 | 9 貌似你没搞清楚变量的基本概念, 变量就是 value 的 holder, 指针就是数, 只要是
数值一样的, delete a, delete b 肯定是一样的。 same for all the others. |
h***i 发帖数: 1970 | 10 是,明显是新手,跳了贼船了,c++的工作的确没多少了。
【在 K**********g 的大作中提到】 : 楼主, wwzz和二爷说的并不是玩笑话。 : 看样子你也不是用过很多年c++的人,放弃c++也没什么可惜的。把你现在花在学习c++ : 上的精力,花在java上更值得。
|