首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ this指针:用于在成员函数中指向调用该函数对象

C++中this指针是一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...二、作为返回值this指针 this指针可以作为返回值返回。这种情况下,返回指向调用该函数对象指针。为了实现这个功能,需要将返回类型设置为类引用或指针类型。...person.setName("Tom").setName("Jerry"); std::cout << person.getName() << std::endl; // 输出Jerry 在setName函数内部,返回指向调用该函数对象指针...这里使用了*this来访问调用该函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以在函数内部访问其他对象成员变量和成员函数。...在getName函数内部,使用了this指针访问调用该函数对象成员变量name。

17540
您找到你想要的搜索结果了吗?
是的
没有找到

C++核心准则编译边学-F.43 永远不要返回指向局部对象指针或引用

这段代码中我设法读取函数f被调用后放弃局部变量。保存在glob中指针可以在很长时间之后被使用并以无法预期方式带来麻烦。...类似地,也可以构造出从内部作用向外部作用“泄漏”指针例子。这样例子等价于向函数外部泄漏(指向局部变量指针。...这个问题稍微不同版本是将指针放到生命周期超过指针指向对象容器中情况。...参见:产生悬空指针另一种情况是指针无效化。它可以通过类似的技术检查或防止。 译者注:指针无效化应该是指针本来指向是一个有效对象,但后来对象被销毁而指针没有被同时清空情况。...编译器倾向于捕捉返回指向局部变量引用情况,也可以在很多情况下捕捉返回指向局部变量指针情况。

68520

稳扎稳打JavaScript(一)——作用链内存模型

执行结束后,函数作用作用链、执行环境被销毁;而变量对象仍有可能留在内存中(如果函数内部有闭包,则函数执行结束后变量对象仍然留在内存,直到闭包执行结束,该变量对象才会被销毁)。...全局环境通过一个指针指向作用链,作用链中又通过指针指向变量对象调用外层函数时 ? 当调用“外层函数”时,会进行如下操作: 创建外层函数变量对象。...也就是把先前创建“外部函数作用链”中第一个作用指针指向“外部函数变量对象”,第二个指针指向“全局变量对象”。 将“外层函数执行环境”压入执行环境栈顶部。...PS:执行环境栈顶表示当前正在执行环境。 调用闭包时 ? 调用闭包时,会进行如下操作: 销毁“外层函数”作用链和执行环境。 创建闭包变量对象。...并且,JS没有块级作用,因此在with、catch中创建变量将属于离它们最近函数! 那么,这种功能JS是如何实现呢?

1.1K80

【笔记】《C++Primer》—— 第19章:特殊工具与技术

中我们可以先声明一个枚举类,然后后面再定义它,但是类似数组声明,我们需要保证声明时整个枚举类空间是可确定,也就是我们必须指定限定作用枚举类成员类型 19.4 类成员指针 成员指针给了我们一种指向非静态成员方法...,因为一般来说我们指针只能指向某个对象成员而非一个抽象上成员,静态成员除外因为静态成员不属于任何一个对象 成员指针让我们可以指向非静态成员,但是当我们需要使用成员指针时我们还是需要指定它真正所属对象...,否则编译器会认为此函数声明无效,后面的取地址符也不可少,这是因为成员函数到函数指针间没有自动转换规则 我们调用成员函数方法和使用成员类差不多,区别是标志着函数名括号仍然不可少,这是因为调用运算符优先级太高了...,由于成员指针不是可调用对象,因此最常用方法仍然是使用标准库模板function。...,将调用运算符转为指针调用 C11多了一种简单一些方法是使用标准库功能mem_fn来让编译器自己去推断成员类型,也就是在需要传入可调用对象地方改写为mem_fn(&Screen::testFunction

80540

【Android NDK 开发】JNI 引用 ( 局部引用 | 局部引用作用 | 局部引用产生 | 局部引用释放 | 代码示例)

局部引用作用范围 : ① 空间 : 不能 跨线程 , 跨方法调用 , 仅在本作用有效 ; ② 时间 : 创建后可以使用 , 手动释放 或 作用结束 引用被释放不可使用 ; IV ....局部引用产生 与 释放 : ① 局部引用产生 : 使用 NewXXX / FindXXX 等 大多数 JNI 方法 默认创建 Java 引用类型对象 都是局部引用 ; ② 局部引用释放 : 调用 DeleteLocalRef...局部引用两种释放方式 : ① 自动释放 : 在方法作用结束后 , JVM 自动释放上述 局部引用 变量 ; ② 手动释放 : 通过调用 DeleteLocalRef 方法手动释放 ; 3 ....跨线程 , 跨方法调用 , 仅在本作用有效 时间 : 创建后可以使用 , 手动释放 或 作用结束 引用被释放不可使用 局部引用 创建 : 使用 NewXXX...引用在 作用结束时 会被释放 , 不能将其用于 JNI 反射 Java 类方法和字段 其指针值不为空 , 仍然有值 , 其仍然指向一个地址 ,

56120

详解JavaScript闭包

作用链中下一个变量对象是包含当前环境变量外部环境也就是他调用者,再下一个是更外层,至到全局执行环境。   ...nested()函数从log()方法中被返回,他作用链被初始化为log()中定义所有活动对象,和全局变量对象,这样nested()函数就可以访问所有的变量了。...也可以说,log()函数执行完后,log()作用链被销毁,但变量对象仍然保留在内存中,直到nested()销毁后,引用log()变量对象才会被销毁。 ?    ...有c++或c经验程序员,可能会认为返回是一个方法指针,nested和fun1变量是两个指向这个方法指针,其实不然,c++言语指向方法指针和JavaScript中对一个方法引用有很大不同,JavaScript...中你可以认为一个方法引用变量有一个指向方法指针,同时也有一个隐藏指针指向闭包。

614100

第 19 章 特殊工具与技术

,成员指针不是一个可调用对象,这样指针不支持函数调用运算符。...有三种方法可以从指向成员函数指针中生成可调用对象。 使用标准库模板 function。需要指明对象是否是以指针或引用形式传入。...根据成员指针类型推断可调用对象类型,而无需用户显示指定。生成可定对象可以通过对象调用,也可以通过指针调用。...---- 19.7 局部局部类是指定义在某个函数内部类,局部类定义类型只在定义它作用内可见。 局部所有成员(包括函数在内),都必须完整定义在类内部。...在局部类中也不允许声明静态数据成员,因为没法定义这样成员。 外层函数对局部私有成员没有任何访问特权。 局部类只能访问外层作用定义类型名、静态变量以及枚举成员。

78950

第 19 章 特殊工具与技术

,成员指针不是一个可调用对象,这样指针不支持函数调用运算符。...有三种方法可以从指向成员函数指针中生成可调用对象。 使用标准库模板 function。需要指明对象是否是以指针或引用形式传入。...根据成员指针类型推断可调用对象类型,而无需用户显示指定。生成可定对象可以通过对象调用,也可以通过指针调用。...---- 19.7 局部局部类是指定义在某个函数内部类,局部类定义类型只在定义它作用内可见。 局部所有成员(包括函数在内),都必须完整定义在类内部。...在局部类中也不允许声明静态数据成员,因为没法定义这样成员。 外层函数对局部私有成员没有任何访问特权。 局部类只能访问外层作用定义类型名、静态变量以及枚举成员。

71340

CC++面试题之语言基础篇(一)

继承:继承允许一个类继承另一个类属性和方法。 多态:多态允许不同类对象对相同消息(方法调用)作出不同响应。...需要手动将其转换为适当类型 new 会调用构造函数来初始化对象(如果是自定义类对象),而 malloc 不会执行构造函数。 void * void * 是通用指针类型,被称为"无类型指针"。...对于C++:全局或静态对象对象首次用到时才进行构造。 静态局部变量,全局变量,局部变量特点 首先从作用考虑: 全局变量:全局作用,可以通过extern作用于其他非定义源文件。...静态全局变量 :全局作用+文件作用,所以无法在其他文件中使用。 局部变量:局部作用,比如函数参数,函数内局部变量等等。 静态局部变量 :局部作用,只被初始化一次,直到程序结束。...生命周期: 局部变量在栈上,出了作用就回收内存;而全局变量、静态全局变量、静态局部变量都在静态存储区,直到程序结束才会回收内存。

14310

Environments: JS变量查找“罪魁祸首”

(参数和局部变量)提供「新存储空间」(Environment对象) 执行上下文是对Environment对象「引用」 Environment对象是存放在堆内存(heap)中 每个作用环境变量通过一个称为...静态:通过每个环境变量outer指针构建作用链反应了作用之间嵌套关系 2....作用链与Environment 接着,我们继续探索作用链是如何通过Environment实现。...静态:通过每个环境变量outer指针构建作用链反应了作用之间嵌套关系 2. 动态:执行上下文堆栈反应了函数调用关系 ❞ ---- 4....断点3:执行plus2(5) 调用plus2(5)生成了对应变量对象,并且将该变量对象outer指针与plus2函数对象[[Scope]]相等。

61820

深入理解Js中this

深入理解Js中this JavaScript作用为静态作用static scope,但是在Js中this却是一个例外,this指向问题就类似于动态作用,其并不关心函数和作用如何声明以及在何处声明...,而与之相对应是动态作用dynamic scope则不同,其函数作用域中遇到既不是参数也不是函数内部定义局部变量时,到函数调用上下文中去查。...全局作用 直接声明在顶层变量或方法就运行在全局作用,借用函数[[Scopes]]属性来查看作用,[[Scopes]]是保存函数作用对象,是函数内部属性无法直接访问但是可以打印来查看。...localContext作用,也可以称为局部作用 块级作用 代码块内如果存在let或者const,代码块会对这些命令声明变量从块开始就形成一个封闭作用。...()方法,其作用都是可以在特定作用域中调用函数,等于设置函数体内this对象值,以扩充函数赖以运行作用,此外需要注意使用bind绑定this优先级是大于apply和call,即使用bind绑定

39410

《C++Primer》第十九章

枚举类型 C++包含两种枚举:限定作用和不限定作用。C++新标准引入了限定作用枚举类型。...例如我们可以令pdata指向某个非特定Screen对象contents成员: pdata = &Screen::contents; 在C++11新标准中声明成员指针最简单方法是使用auto或者decltype...将成员函数用作可调用对象 要想通过有一个指向成员函数指针进行函数调用,必须首先利用.*或者->*运算符将该指针绑定到特定对象上。...因此与普通函数指针不同,成员指针不是一个可调用对象,这样指针不支持函数调用运算符。 因为成员指针不是可调用对象,因此我们不能直接将一个指向成员函数指针传递给算法。...,这意味着前面五个位可能会存储在一个unsigned int中,这些二进制位能否压缩到一个整数中以及如何压缩是与机器相关 取地址运算符&不能作用,因此任何指针都无法指向 最好将位设为无符号类型

1.3K10

重学JavaScript之匿名函数

function(a1, a2, a3) { // 函数体 } 上面例子也是完全可以,但是却无法调用这个函数,因为没有指向这个函数指针,但是可以将这个函数作为参数传入另外一个函数,或者从一个函数中返回另一个函数时就可以使用这种形式来定义匿名函数...这两行代码访问了外部函数中变量 p。即使这个内部函数被返回了,而且被其他地方调用了,但它仍然可以访问变量 p。之所以还能够访问这个变量,是因为函数作用链中包含了c()作用。...我们在创建函数时候会创建一个预先包含全局变量对象作用链,这个作用链被保存在内部[Scope]属性中,当调用函数时,会为函数创建一个执行环境,然后通过赋值函数[Scope]属性中对象构建起执行环境作用链...所以,作用链本质上是一个指向变量对象指针列表,它只引用但不实际包含变量对象。...无论什么时候函数在访问一个变量时,就会从作用链中搜索具有相同名字变量,函数执行完成后,局部活动对象将被销毁,内存中仅保存全局作用

1.4K20

C++ 变量和复合类型

和大多数编程语言一样,C++标识符需要以字母或下划线开头,有数组、字母和下划线组成,而且对大小写敏感。 作用 如果一个标识符定义在花括号外面,那么这个标识符作用就是全局作用。...全局作用变量可以在本文件任何地方访问,如果在其他文件中声明这个标识符,那么还可以在其他文件中访问。 如果一个标识符在某对花括号中定义,那么这个标识符作用就在这对花括号中,这就是局部作用。...局部作用标识符在超出这个块后,就无法被访问了。如果有一个全局变量,然后在某个作用域中又定义了一个同名变量,那么这个局部变量就会屏蔽对全局变量访问。...int *p, d; //即使星号和类型放在一起,p仍然指针,d仍然是变量 //int* p, d; 符合类型还可以互相组合。比如说,我们可以定义指针指针。...这种情况和上面那种情况正好相反,这次是将指针指向对象声明为const,这样一来,我们无法修改指针指向对象值,但是我们可以修改指针指向其他对象地址。

1K100

C++ Qt常用面试题整理(不定时更新)

局部静态变量:存储在静态存储区,程序运行期间只被初始化一次,作用仍然局部作用,在变量定义函数或语句块中有效,程序结束时由操作系统回收资源。...全局静态变量:存储在静态存储区,静态存储区中资源在程序运行期间会一直存在,直到程序结束由系统回收。未初始化变量会默认为0,作用在声明他文件中有效。...sizeof指针可以得到指针本身大小,sizeof引用得到是变量本身大小。指针传参还是值传递,引用传参传是变量本身。 4.如何理解多态 定义:同一操作作用于不同对象,产生不同执行结果。...声明基类指针或者引用指向不同子类对象调用相应虚函数,可以根据指针或引用指向子类不同从而执行不同操作。 Overload(重载):函数名相同,参数类型或顺序不同函数构成重载。...该类每个对象都会包含一个虚指针(虚指针存在于对象实例地址最前面,保证虚函数表有最高性能),需指针指向虚函数表。

2K10

【愚公系列】2023年03月 其他-Web前端基础面试题(JS_33道)

9、改变函数内部 this 指针指向函数(bind,apply,call 区别) 10、箭头函数中this 指向举例? 11、数组常用方法有哪些? 12、说说数组去重? 13、闭包有什么用?...9、改变函数内部 this 指针指向函数(bind,apply,call 区别) 通过 apply 和 call 改变函数 this 指向,他们两个函数第一个参数都是一样表示要改变指向那个对象...this指向在函数定义时候是确定不了,只有函数执行时候才能确定this到底指向谁**,**实际上this最终指向是那个调用对象,在构造函数中,this指向构造实例 27、什么是作用...ES5 中只存在两种作用:全局作用和函数作用。...在 JavaScript 中,我们将作用定义为一套规则,这套规则用来管理引擎如何在当前作用以及嵌套子作用域中根据标识符名称进行变量(变量名或者函数名)查找 28、NaN 是什么,用 typeof

88810

重新回味·Block·

通过初始化Block实例构造方法调用也可以看到局部变量value作为参数传递,具体如下所示: //Block 初始化方法 __testBlock_block_impl_0(void *fp, struct...Block在变量作用之外通过指针访问使用,定义在栈上__block局部变量和Block在超出作用时将被废弃。...那Block超出作用如何存在呢? 这里就用到BlockCopy操作,即将分配在栈上Block 和__block变量复制到堆上,从而延长了Block和__block变量生命周期。...由栈复制到堆之前,__fawarding指针指向自身; 复制之后,栈上__fawarding指针指向复制到堆上__block变量,堆上__fawarding指针指向自身。...__block变量对象也被从栈复制到堆上,当__block变量从堆上释放时,该对象才能得到释放; 当使用__weak修饰__block变量在赋值时候,由于赋值对象作用问题而释放,从而导致__block

62140

深入理解Block

通过初始化Block实例构造方法调用也可以看到局部变量value作为参数传递,具体如下所示: //Block 初始化方法 __testBlock_block_impl_0(void *fp, struct...Block在变量作用之外通过指针访问使用,定义在栈上__block局部变量和Block在超出作用时将被废弃。...那Block超出作用如何存在呢?...由栈复制到堆之前,__fawarding指针指向自身; 复制之后,栈上__fawarding指针指向复制到堆上__block变量,堆上__fawarding指针指向自身。...,赋值给该__block变量对象也被从栈复制到堆上,当__block变量从堆上释放时,该对象才能得到释放; 当使用__weak修饰__block变量在赋值时候,由于赋值对象作用问题而释放,从而导致

90210
领券