C++进阶之this和*this用法实例(四百三十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🌻1. 前言

本篇目的:C++中this与*this用法实例

🌻2. C++ this与*this介绍

  1. 基本概念
    this为指向当前对象的指针,*this为当前对象的左值引用,二者配合可实现链式调用、自拷贝保护、返回自身。

  2. 功能
    区分形参与成员变量,支持返回引用实现连续操作,可在赋值运算符内检测自赋值,亦可作为参数传递。

  3. 使用限制
    仅在非静态成员函数内可见;返回*this必须是引用避免切片;不能对空指针解引用。

  4. 性能特性
    编译器隐式传递指针,无额外消耗;返回引用省一次拷贝;链式调用在编译期展开。

  5. 使用场景
    链式构造、流式接口、赋值运算符、拷贝交换、资源管理类。

🌻3. 代码实例

🌻3.1 链式设置成员值
  1. 应用场景
    配置对象属性时连续调用。

  2. 用法实例

#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 赋值运算符防范自拷贝
  1. 应用场景
    管理动态资源的类需要安全赋值。

  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 拷贝交换惯用法
  1. 应用场景
    简洁实现强异常安全赋值。

  2. 用法实例

#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拷贝交换异常安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值