社区
C++ 语言
帖子详情
new,delete
botebote419
2010-11-20 07:35:10
int main()
{
int i = 10,j = 5;
int *ptr = new int(i);
delete ptr;
*ptr = j;
return 0;
}
请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
...全文
96
11
打赏
收藏
new,delete
int main() { int i = 10,j = 5; int *ptr = new int(i); delete ptr; *ptr = j; return 0; } 请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
botebote419
2010-11-20
打赏
举报
回复
回9楼,靠,真搞错了,多谢各位回答了
botebote419
2010-11-20
打赏
举报
回复
还有没有对我上面的问题能解答下的,谢谢啊
gules
2010-11-20
打赏
举报
回复
[Quote=引用 8 楼 botebote419 的回复:]
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr-> use;
if(ptr-> use==0)
delete ptr;
ptr = rhs.ptr;……
[/Quote]
呵呵,这是引用计数,你所说的问题何在?(计数为0时原内存释放,然后重新指向合法的新内存,与你所说的情况一样吗?你的是没改变指向,这里是指向另一个合法的地方,别搞混罗!)
botebote419
2010-11-20
打赏
举报
回复
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr->use;
if(ptr->use==0)
delete ptr;
ptr = rhs.ptr;
val = rhs.val;
.
.
.
}
如果按3楼所说,这个代码不是有问题吗
luciferisnotsatan
2010-11-20
打赏
举报
回复
delete释放指针指向的内存,而delete之后,指针还是指向那个空间。但那个空间现在是干什么用的就不知道了,这样很危险。所以要把指针指向NULL
無_1024
2010-11-20
打赏
举报
回复
delete 释放的是指向的对象 而不是释放指针的 释放以后ptr是一个野指针 一般要将其置为空 也就是赋值为NULL 这样就是避免野指针的存在
ruben5288
2010-11-20
打赏
举报
回复
delete只是释放了之前指针的内存,而这个指针则还是存在,只不过后面这个赋值已经是占用了非法内存了!
qq120848369
2010-11-20
打赏
举报
回复
指针变量存的地址还是原来的地址,只是地址上的东西已经不是那个东西.
gules
2010-11-20
打赏
举报
回复
为什么delete后的ptr还能继续被赋值啊?
-----------------------------------
指针指向没有改变,当然能赋值(与正常使用是一样的),只不过赋值写入的内存不再是程序中合法的内存(这种行为将是未定义的,也就是说什么事情都可能发生,无法预测),应当避免!
失落的凡凡
2010-11-20
打赏
举报
回复
delete ptr是释放ptr这个指针指向那个对象,而ptr是个指针,是个自动变量,delete不会销毁指针本身。
Csuxiaowu
2010-11-20
打赏
举报
回复
delete 之后 最好 使其 = NULL
new
delete
new
[]和
delete
[]的面试总结和底层实现的介绍
1.
new
delete
总结 分配 释放 类别 可否重载 malloc() free() C函数 不可
new
delete
C++表达式 不可 ::operator
new
() ::operator
delete
() C++函数 可 allocator<...
C++学习——
new
delete
关键字
总结C++语言中用于动态开辟与释放内存的
new
与
delete
关键字!
【C++】
new
/
delete
对象过程
文章目录引言:(一)
new
对象过程(二)
delete
对象过程 引言: 我们往往使用
new
delete
对象,这个过程被编译器藏得很深,但是这个过程具体是什么?和C语言的malloc、free有什么样的区别和联系呢?那就先看看下面这个...
class下的
new
delete
class test { public: test(){printf("constructor/n");}; ~test() {printf("destuctor/n");... test *t =
new
test[12];
delete
t; <br /> } <br />
new
delete
与malloc free的区别
malloc与free是C++/C 语言的标准库函数,
new
/
delete
是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。...
C++ 语言
65,212
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章