简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1. 前言
本篇目的:C++中this与*this用法实例
🌻2. C++ this与*this介绍
-
基本概念
this为指向当前对象的指针,*this为当前对象的左值引用,二者配合可实现链式调用、自拷贝保护、返回自身。 -
功能
区分形参与成员变量,支持返回引用实现连续操作,可在赋值运算符内检测自赋值,亦可作为参数传递。 -
使用限制
仅在非静态成员函数内可见;返回*this必须是引用避免切片;不能对空指针解引用。 -
性能特性
编译器隐式传递指针,无额外消耗;返回引用省一次拷贝;链式调用在编译期展开。 -
使用场景
链式构造、流式接口、赋值运算符、拷贝交换、资源管理类。
🌻3. 代码实例
🌻3.1 链式设置成员值
-
应用场景
配置对象属性时连续调用。 -
用法实例
#include <iostream>
struct Config {
int x;
int y;
Config& setX(int v) { x = v; return *this; }
Config& setY(int v) { y = v; return *this; }
};
int main() {
Config c;
c.setX(10).setY(20);
std::cout << c.x << c.y;
}
输出 1020
🌻3.2 赋值运算符防范自拷贝
-
应用场景
管理动态资源的类需要安全赋值。 -
用法实例
#include <iostream>
struct Buffer {
int* p;
size_t n;
Buffer(size_t s): p(new int[s]), n(s) {}
Buffer& operator=(const Buffer& rhs) {
if (this == &rhs) return *this;
delete[] p;
p = new int[rhs.n];
n = rhs.n;
return *this;
}
~Buffer() { delete[] p; }
};
int main() {
Buffer a(4), b(8);
a = b;
std::cout << a.n;
}
输出 8
🌻3.3 拷贝交换惯用法
-
应用场景
简洁实现强异常安全赋值。 -
用法实例
#include <iostream>
#include <algorithm>
struct Vec {
int* data;
size_t len;
Vec(size_t l): data(new int[l]), len(l) {}
Vec(const Vec& v): data(new int[v.len]), len(v.len) {}
Vec& operator=(Vec v) {
std::swap(this->data, v.data);
std::swap(this->len, v.len);
return *this;
}
~Vec() { delete[] data; }
};
int main() {
Vec v1(3), v2(5);
v1 = v2;
std::cout << v1.len;
}
输出 5
🌻3.4 this与*this总结
关键字 | 功能描述 | 典型应用 |
---|---|---|
return *this | 链式调用 | 配置接口 |
if this == & | 自拷贝检测 | 赋值运算符 |
swap this | 拷贝交换 | 异常安全 |