<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TDTC_XQ的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TDTC_XQ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TDTC_XQ]]></copyright><item><title><![CDATA[C++ 堆对象、构造函数传参、单例与智能指针：从 new 到 make_unique]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/170202414</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/170202414</guid><author>TDTC_XQ</author><pubDate>Sat, 07 Nov 2026 01:28:33 +0800</pubDate><description><![CDATA[在 C++ 中，newvector、智能指针和单例模式经常会同时出现。理解它们背后的构造函数调用规则，能帮你少踩很多坑。]]></description><category></category></item><item><title><![CDATA[Linux 网络编程：彻底搞懂 bind、connect 与 sockfd 的地址（ IP 地址 + 端口号 组成的网络通信端点）分配机制]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168555190</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168555190</guid><author>TDTC_XQ</author><pubDate>Tue, 20 Oct 2026 16:26:42 +0800</pubDate><description><![CDATA[bind是显式告诉内核"我是谁"，connect是告诉内核"我要连谁"。sockfd本身只是个整数，但内核通过它关联了完整的连接信息。服务端必须显式bind到固定端口，否则客户端找不到入口。客户端通常不显式bind，由内核在connect时自动分配本地端口。sockfd不直接存 IP 和端口，但内核通过它保存了完整的四元组，你只需要拿着它读写即可。]]></description><category></category></item><item><title><![CDATA[为什么绑定 0.0.0.0 就能监听所有 IP？从 struct sockaddr_in 到内核 socket bind的详细介绍]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168455497</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168455497</guid><author>TDTC_XQ</author><pubDate>Tue, 20 Oct 2026 00:58:27 +0800</pubDate><description><![CDATA[保存的是网络地址信息；bind把这些信息写入内核 socket 对象；sockfd就是这个内核对象的句柄；0.0.0.0不是真实 IP，而是内核约定的通配地址；绑定只要发到本机这个端口的连接，不管目标 IP 是哪一个，都交给这个 socket。]]></description><category></category></item><item><title><![CDATA[Linux网络编程accept的讲解]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168454707</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168454707</guid><author>TDTC_XQ</author><pubDate>Mon, 19 Oct 2026 22:45:03 +0800</pubDate><description><![CDATA[accept从监听队列里拿出一个已完成握手的连接，返回一个专属的文件描述符用来和这个客户端通信，同时让监听套接字继续接待下一个。]]></description><category></category></item><item><title><![CDATA[模板类的写法]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168141463</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/168141463</guid><author>TDTC_XQ</author><pubDate>Fri, 16 Oct 2026 17:48:23 +0800</pubDate><description><![CDATA[模板类的成员函数如果在类外定义，每个函数前面都要加4}59}注意类名要写成Stack<T>，不能只写Stack。]]></description><category></category></item><item><title><![CDATA[C++ 枚举指南：从 enum 到 enum class]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164865765</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164865765</guid><author>TDTC_XQ</author><pubDate>Thu, 10 Sep 2026 21:45:00 +0800</pubDate><description><![CDATA[编译器会自动给每个名字分配一个整数值，从 0 开始递增名字对应的整数值RED0GREEN1BLUE2OK = 0,MON = 1,TUE, // 2WED, // 3THU, // 4FRI // 5语法和传统枚举几乎一样，只是多了个class关键字。特性enumenum class作用域泄漏到外层有自己的作用域隐式转int可以（不安全）不可以（必须显式转换）指定底层类型不行可以命名冲突容易冲突不会冲突switch (d)]]></description><category></category></item><item><title><![CDATA[C++ 运算符重载指南]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164863266</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164863266</guid><author>TDTC_XQ</author><pubDate>Thu, 10 Sep 2026 17:03:37 +0800</pubDate><description><![CDATA[int _month;int _day;d += 5;// 编译器理解成：核心规则：左操作数必须是当前类的对象，this指针自动指向它。所以参数列表里只需要写右操作数。对比项成员函数非成员函数左操作数固定是当前类对象（this没有this，必须显式写参数个数只写右操作数左右都要写能否访问私有成员能（本身就是成员）需要friend声明// ❌ 两个都是内置类型，禁止重载// 编译报错// ✅ 至少一个是自定义类型。]]></description><category></category></item><item><title><![CDATA[C++ 多态的底层核心三个概念：虚函数表 (vtable)、虚表指针 (vptr) 和 间接寻址]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164005111</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/164005111</guid><author>TDTC_XQ</author><pubDate>Mon, 24 Aug 2026 02:17:12 +0800</pubDate><description><![CDATA[多态的开关，永远掌握在“父类”手里！如果父类没加virtual，这扇门就是关死的。子类就算自己喊破喉咙（写了），也进不了虚表。只有父类加了virtual，这扇门才会打开，编译器才会在虚表里给析构函数留位置，子类的打包函数才有机会被放进去。只要你的类打算被继承，并且未来会通过基类指针去delete，那么它的析构函数就必须是虚函数！一句话总结子类的虚表都是拷贝父类的，父类有的虚函数，子类才有，才能重写后写入虚表空间换时间：用每个对象多占 8 字节（64位系统下vptr。]]></description><category></category></item><item><title><![CDATA[ 网络编程第一步：从 `socket()` 到 `sockaddr_in` 的底层逻辑全解析]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163954417</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163954417</guid><author>TDTC_XQ</author><pubDate>Mon, 24 Aug 2026 01:10:19 +0800</pubDate><description><![CDATA[在网络编程中，一切通信都始于套接字（Socket）。这行代码的本质，就是向操作系统申请建立一个网络通信的“端点”（Endpoint），并返回一个文件描述符（_sockfd后续所有的绑定（bind）、接收（recvfrom）、发送（sendto）等操作，都要靠这个编号来指代这条专属的通信管道。socket()AF_INETAF_INET6SOCK_DGRAM(注：如果这里写的是，则代表采用面向连接、可靠的 TCP 协议。]]></description><category></category></item><item><title><![CDATA[ 为什么服务器bind了特定 IP，客户端访问就必须使用这个 IP？]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163982473</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163982473</guid><author>TDTC_XQ</author><pubDate>Sun, 23 Aug 2026 00:00:40 +0800</pubDate><description><![CDATA[回到最初的问题：● 如果服务器绑定了具体 IP，客户端必须使用该 IP，因为操作系统内核只认这个“专属门牌号”。● 如果服务器绑定了0.0.0.0，客户端可以使用服务器任意可达的 IP，因为服务器开启了“全量接收”模式。]]></description><category></category></item><item><title><![CDATA[sockaddr_in 和sockaddr的用法区别]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163947754</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163947754</guid><author>TDTC_XQ</author><pubDate>Fri, 21 Aug 2026 20:00:00 +0800</pubDate><description><![CDATA[sockaddr作用通用地址结构IPv4地址结构里面有什么原始字节IP+端口程序员常用吗很少直接用经常用bind需要什么sockaddr*需要转换支持所有协议只支持IPv4创建：socket()准备地址：绑定：这个固定套路。学习accept()&len);具体结构体负责存信息，通用sockaddr负责接口统一。]]></description><category></category></item><item><title><![CDATA[关于变量声明和定义的解释（static）]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163891530</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163891530</guid><author>TDTC_XQ</author><pubDate>Wed, 19 Aug 2026 16:44:37 +0800</pubDate><description><![CDATA[只有当你在main这一刻，编译器才会按照图纸，在内存（栈区或堆区）中真正为obj分配内存，其中就包含了a的空间。所以，成员变量a的真正“定义”（内存分配），是随着对象的创建而发生的。类里的int a;= 声明（画图纸，不占内存）。创建对象= 定义（按图纸盖房子，分配内存）。类里的= 声明（图纸上标记个特殊房间）。类外的= 定义（真正盖这个特殊房间）。]]></description><category></category></item><item><title><![CDATA[深入理解并发编程：临界区、临界资源与线程的“三角关系”]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163860742</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163860742</guid><author>TDTC_XQ</author><pubDate>Tue, 18 Aug 2026 17:41:44 +0800</pubDate><description><![CDATA[临界资源、临界区和线程构成了并发编程的底层逻辑。线程是并发的执行体，临界资源是它们争夺的焦点，而临界区则是我们通过加锁等手段划定的安全保护区。只有理清这三者的关系，严格遵守互斥与同步的准则，我们才能编写出既高效又安全的并发程序。]]></description><category></category></item><item><title><![CDATA[C++ 成员指针深度解析：为什么它不能像普通指针那样直接解引用？]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163802210</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163802210</guid><author>TDTC_XQ</author><pubDate>Sun, 16 Aug 2026 19:45:02 +0800</pubDate><description><![CDATA[为了方便记忆，我们可以通过以下对比来梳理：特性普通指针 (int*void(*)()成员指针 (int A::*存储内容绝对内存地址相对偏移量（可能包含 this 调整量）是否依赖对象否（静态成员除外）是（必须绑定具体对象实例）解引用/调用直接*p或p()必须用obj.*p或只要带了这个星号，不管是函数还是变量，都是“残缺”的指针。它们只描述了“在哪里”，而没有描述“属于谁”。必须配合.*或->*绑定对象后，才能完成真正的访问。]]></description><category></category></item><item><title><![CDATA[C++函数指针语法和类型]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163802004</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163802004</guid><author>TDTC_XQ</author><pubDate>Sun, 16 Aug 2026 19:17:52 +0800</pubDate><description><![CDATA[函数指针是 C/C++ 中一种的机制，它允许程序在运行时动态选择并调用不同的函数，是实现回调、策略模式和插件系统的核心基础。]]></description><category></category></item><item><title><![CDATA[软链接和硬链接对比讲解]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163677692</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163677692</guid><author>TDTC_XQ</author><pubDate>Wed, 12 Aug 2026 01:04:14 +0800</pubDate><description><![CDATA[在 Linux/Unix 文件系统中，和是两个非常核心的概念。。在 Linux 中，文件名只是指向 Inode 的一个“别名”，而 Inode 才是真正存储文件数据位置、权限、大小等元数据的地方。2. 软链接 (Soft Link / Symbolic Link)本质： 软链接是一个独立的文件，它的内容是源文件的路径字符串。创建命令： ln -s 源文件 软链接名1.独立 Inode： 软链接有自己的 Inode，与源文件不同。]]></description><category></category></item><item><title><![CDATA[深入理解 Linux 管道通信：从匿名管道到命名管道的底层原理与工程避坑]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163672685</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163672685</guid><author>TDTC_XQ</author><pubDate>Tue, 11 Aug 2026 17:50:11 +0800</pubDate><description><![CDATA[无论是匿名管道还是命名管道，本质上都是操作系统在内核中开辟的内存缓冲区。匿名管道是“家族内部群聊”，靠血缘和继承连接；命名管道是“公共聊天室”，靠共同知道的文件名连接。]]></description><category></category></item><item><title><![CDATA[内存和缓冲区的关系]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163648396</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163648396</guid><author>TDTC_XQ</author><pubDate>Tue, 11 Aug 2026 02:36:05 +0800</pubDate><description><![CDATA[CPU 把数据一股脑全塞进内存里的“缓冲区”，然后告诉硬盘：“你自己慢慢从缓冲区里搬走吧，我要去干别的活了！：让慢速的硬盘慢慢把数据先搬到内存里的“缓冲区”，然后 CPU 直接从缓冲区里“唰唰唰”地拿数据。如果没有缓冲区，CPU 每次读写硬盘，都要停下来傻等硬盘转圈圈，这就太浪费 CPU 的生命了。（也就是你的程序自己的内存）中的一个缓冲区里（通常是 8KB 大小）。：是真实的物理硬件（RAM），是你程序运行时的底层资源。：数据并不是直接从父进程的内存“飞”到子进程的内存里的。]]></description><category></category></item><item><title><![CDATA[进程和线程的简单介绍]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163617515</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163617515</guid><author>TDTC_XQ</author><pubDate>Sun, 09 Aug 2026 23:34:38 +0800</pubDate><description><![CDATA[进程和线程是操作系统中两个核心概念，它们共同支撑起现代计算机的多任务处理能力。简单来说，。]]></description><category></category></item><item><title><![CDATA[认识读写锁（pthread_rwlock）]]></title><link>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163587358</link><guid>https://blog.youkuaiyun.com/TDTC_XQ/article/details/163587358</guid><author>TDTC_XQ</author><pubDate>Sat, 08 Aug 2026 11:41:17 +0800</pubDate><description><![CDATA[读写锁：


作用：它和 mutex 最大区别：mutex：


读写锁：



二、读写锁类型

定义：


例如：


这个变量就是一把读写锁。但是：刚定义出来不能直接使用。必须初始化。



参数1：rwlock

类型：


意思：例如：定义：


初始化：


这里：


就是把锁的地址传进去。类型：


意思：一般我们不用特殊属性。所以：传：


表示：使用默认属性。成功：


失败：


注意：pthread系列函数和普通Linux函数不一样。例如：


失败：返回：


但是：pthread]]></description><category></category></item></channel></rss>