社区
C++ 语言
帖子详情
谁能帮我这个处学者"this"到底怎么用
mengsu
2003-08-23 08:19:42
开始学习C++遇到指针就懂得很一般,单类和对象中的this指针就没看懂!那为高手能帮我,感激不尽。多维数组指针又怎么用?
...全文
33
17
打赏
收藏
谁能帮我这个处学者"this"到底怎么用
开始学习C++遇到指针就懂得很一般,单类和对象中的this指针就没看懂!那为高手能帮我,感激不尽。多维数组指针又怎么用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mengsu
2003-08-26
打赏
举报
回复
谢谢各位的帮忙!我什么时候能想你们那样呀
积木
2003-08-23
打赏
举报
回复
啊,是啊,我想起来了,非模态好像是这么用的,ft,
正象晨星大哥所说,堆上的对象可以delete,不过
vc中的代码是出了名的不标准
积木
2003-08-23
打赏
举报
回复
嗯,不过这个问题挺有意思的,嘿嘿
好怪的用法。
ttlb
2003-08-23
打赏
举报
回复
回复人: goodboy1881(三井) ( ) 信誉:105 2003-08-23 22:46:00 得分:0
哎~我用bcc55,怎么就没有看到呢?
实际上我也觉得这个根本就不符合编程逻辑
而且我觉得this就不应该被delete,没有什么用啊
但是问题我编了例子竟然没有观察到运行错误,ft
但是我看到一些MFC代码中有delete this;
甚至MSDN中非模态对话框的示例就用到了delete this;
到底什么时候用?一般用来干吗?MSDN的示例代码我看不太懂。
晨星
2003-08-23
打赏
举报
回复
“因为delete this可以用很多种替代的方式啊”,完全同意,比如上面的p->Release(),其实就相当于delete p;
不过ttlb(小鸟)只是问可不可以。(:
Salam2001
2003-08-23
打赏
举报
回复
Dev-C++ 编译通过,没问题。
Healer
2003-08-23
打赏
举报
回复
delete this; 奇怪啊
也许行吧:)
但是delete完了还能print??
this 是 类指向该类的对象的指针。 通常可以省略不用。
积木
2003-08-23
打赏
举报
回复
应该可以在语法上就禁止吧,呵呵,我觉得是,
因为delete this可以用很多种替代的方式啊
晨星
2003-08-23
打赏
举报
回复
呵呵。不过至少从理论上,使用delete this来销毁堆对象也未尝不可。所以说最好使用方法确保该类对象只能在堆上创建。
积木
2003-08-23
打赏
举报
回复
哎~我用bcc55,怎么就没有看到呢?
实际上我也觉得这个根本就不符合编程逻辑
而且我觉得this就不应该被delete,没有什么用啊
但是问题我编了例子竟然没有观察到运行错误,ft
晨星
2003-08-23
打赏
举报
回复
To:goodboy1881(三井)
“一点异常都没有”?你的编译器也真大度。:)
我在VC6里编译并运行你的代码,马上给我跳出一个大对话框,上面密密麻麻写着好多字。(:
积木
2003-08-23
打赏
举报
回复
to steedhorse(晨星) ( )
你的第一句话好像不是很准确,看看这个例程吧,我实验了一下,竟然一点异常没有
#include<iostream>
using namespace std;
class a
{
int i;
public:
a():i(10){};
void del(){ delete this; };
void print(){ cout<<i<<endl; }
};
main()
{
a mya;
mya.del();
mya.print();
}
不过说实话,那个什么对象“自尽”倒是很有趣啊
晨星
2003-08-23
打赏
举报
回复
呵呵,怎么我自己说话也不严格了?:)
“栈上的对象肯定不可以”应改为:“delete栈上对象的this指针肯定不可以”,还是那句话,this指针是属于非静态成员函数的,而指向的才是触发这个函数调用的对象。
晨星
2003-08-23
打赏
举报
回复
To:ttlb(小鸟)
栈上的对象肯定不可以,这一点我想就用不着解释了。
所以,要这样作,最好确保你的对象都在堆上创建(方法之一是私有化所有构造函数,然后提供静态接口来创建对象),这样,通过delete this来释放对象占用的内存空间是完全可以的。比如:
#include <iostream>
using namespace std;
class A
{
private:
A(){}
~A(){}
public:
static A* CreateObject();
void Release();
private:
int mem1 , mem2;
};
A* A::CreateObject()
{
A * p = new A;
cout << "Object created!" << endl;
return p;
}
void A::Release()
{
delete this;
cout << "Object destroyed!" << endl;
}
int main()
{
A *p = A::CreateObject();
p->Release();
return 0;
}
ttlb
2003-08-23
打赏
举报
回复
to steedhorse(晨星):
那么请问,this指针可以delete吗?delete的时候有什么要注意的?
nirvana_li
2003-08-23
打赏
举报
回复
to steedhorse(晨星):厉害!~
晨星
2003-08-23
打赏
举报
回复
不能说this指针属于某个对象,this指针是隐含属于类的非静态成员函数的,当从一个对象上调用某个成员函数时,这个成员函数的this指针就指向该对象,当再次从另一个对象上调用这个成员函数时,这个函数的this指针就指向另一个对象。原因是成员函数的代码每个类只有一份,而不是每一个对象都有一份,因此需要有一种内部机制保证调用a.f()时,操纵的是a对象,而不是b对象,this指针就是这种机制的实质。
全局函数和类的静态成员函数没有this指针,这也是类的静态成员函数不能访问类的非静态成员的原因。全局函数根本不属于任何一个类,就更不需要this指针了,因此,他只能访问它自己的局部变量和整个程序的全局变量。
多维数组相当于多级指针,但用起来有好多问题需要注意,还是多看看书吧。我的感觉是应尽量避免3维以上的数组,维数一多,在数组和指针之间转换来转换去时,一不小心就出错。
github使用手册基础篇
该pdf文档是针对那些入门使用gitub的
学者
的,这个文档将带着你走入github的世界,并使你能够使用和了解github.
C++ this指针
this 指针 引言: 首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。 注意: this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于...
Python+Django+Vue3全栈开发商城项目
一个Django+Vue3前后端分离的全栈商城系统项目,旨在
帮
助广大初
学者
将所学知识快速融合,实现快速开发,专为大学生或者找工作为目的者而设,将零散的... 希望本课程能给广大
学者
带来技能和项目上的提升。 项目截图:
C++ this 指针
引言: 首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。 注意: this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型, ———————————————— 版权声明:本文为CSDN博主「我是一名好
学者
」的
如何写一封彬彬有礼的英文email给国外
学者
鉴于好多伙伴向我询问如何写英文email,所以我的第一篇技术文章选择写擅长的,如何写一封有礼貌的寻求
帮
助的英文信函。先总结要点,后上例子: 给国外的
学者
写信,一定要记得: 1.礼貌,礼貌,礼貌...!再怎么客气都不为过。 2.简明扼要,直述问题和想要他们如何
帮
助你。 3.得到回应后要感谢
帮
助,适当的恭维。 以下例子是我的一些经验,分享给大家,希望采用的伙伴们,如果有幸
帮
到你,请不
C++ 语言
64,684
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章