在这一章中,我们将重新聚焦于 C++ 中显式使用delete this的行为,特别是它如何触发对象的析构过程以及这一行为的适当用法和潜在风险。正确理解和使用delete this需要对 C++ 的内存管理和对象生命周期有深刻的了解。 3.1 显式删除对象的含义与后果 在C++ 中,使用delete this语句意味着要求程序自行销毁当前对象,并释放...
delete this; 正如Stroustrup所说的,“ this”可能是指针的引用,但是在C ++的早期版本中没有引用。如果将“ this”实现为参考,则可以避免上述问题,并且比指针更安全。 以下是使用“ this”指针的情况: 1)当局部变量的名称与成员的名称相同时 输出: x = 20 对于构造函数,当参数名称与成员名称相同时,也可以使用...
在C++ 中,每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 不用this, 在类的内部, 也可以访问里面的变量和访问,那么为什么还要this? 和java一样, 为了防止全局变量名和局部变量名! 友元函数没有this指针,因为友元不是类的成员。只有...
OnFinalMessage的默认实现不执行任何操作,但你可以替代此函数,以在销毁窗口之前处理清理。 如果要在窗口销毁时自动删除对象,可在此函数中调用delete this;。 CWindowImpl::SubclassWindow 子类化 hWnd 标识的窗口并将其附加到CWindowImpl对象。 复制 BOOL SubclassWindow(HWND hWnd); ...
delete this; 正如Stroustrup所说的,“ this”可能是指针的引用,但是在C ++的早期版本中没有引用。如果将“ this”实现为参考,则可以避免上述问题,并且比指针更安全。 以下是使用“ this”指针的情况: 1)当局部变量的名称与成员的名称相同时 输出:
Counter& add(void) {++m_count;return*this; }voiddestory(void) { cout<<"该类已经删除"<<endl;deletethis; }private:intm_count; };intmain() { Counter c; c.add().add().add(); c.print(); Counter*pc =newCounter; pc->add(); ...
palce_address 是个指针 initializers 提供一个(可能为空的)以逗号分隔的初始值列表delete this 合法吗?Is it legal (and moral) for a member function to say delete this?合法,但:必须保证 this 对象是通过 new(不是 new[]、不是 placement new、不是栈上、不是全局、不是其他对象成员)分配的 必须保证...
(1)从图1可以发现this指针通过ECX寄存器,传递给了成员函数。this指针就是对象的地址。 图1 Main函数 (2)从图 2可以发现访问对象的成员变量用的就是之前通过ECX传入的this指针。 图2 show()函数 三、深入理解 通过截图及相关的资料,可以很清晰的知道在调用构造函数、show()函数之前的那个ECX就是this指针,也就是...
delete,new new用来生成对象并分配内存,delete用来销毁对象并回收内存。 do,for,while 循环语句的组成部分。C++和C语言支持do-while循环、for循环和while循环。 double、float、long、int、short、signed、unsigned 数值类型。 signed和unsigned作为前缀修饰整数类型,分别表示有符号和无符号。signed和unsigned修饰char类型,构...
指针不仅可以表示变量的地址,还可以存储各种类型数据的地址,指针变量是用来保存这些地址的变量,与数组类似,依据地址存放的数据类型,指针也分为int指针类型,double指针类型,char指针类型等等。 综上,指针的实质就是数据在内存中的地址,而指针变量是用来保存这些地址的变量。