2022-01-12 23:28:54
- 如何写一个socket : RAII 资源获取就是初始化,WSAStartup 和WSACleanup 应该设计成类的静态方法,因为他们只需要在类的初始化和退出调用。
- 类除了保留对外的接口,内部用到的变量和方法对调用者不可见,这种习惯叫pimpl用法。
- 编译时指定规范: g++ -g -o test test.cpp -std=c++11
- 类成员初始化语法:std::initializer_list<T> ,11
- 注解 ,17
- final, oerride ,default , delete , 11
- auto , 11
- for-each, 11
- ctrl k + s 包围代码
- 结构化绑定, 17
- STL 容器方法 emplace 原位构造,
- 左值 有变量名+可取地址, 右值:常量
- std::unique_ptr 引用计数永远是1,拷贝构造和赋值运算符=delete
- std::shared_ptr 线程共享安全,
- std::enable_shared_from_this
- std::weak_ptr 不控制生命周期的智能指针,协助shared_ptr工作
- unique_ptr与裸指针大小相同,shared_ptr是unique_ptrr 2倍
- 智能指针原则:用了智能指针就不要再用裸指针,
使用CMake管理编译,他可以生成VisualStudio的工程文件。
使用VisualStudio阅读开源代码 ----- FileZilla源代码, 打开解决方案:Ctrl + Alt + L
gdb 调试redis 程序 ,https://github.com/redis/redis.git
gdb 调试 nginx程序 , https://github.com/nginx/nginx.git
创建线程 pthread_create
C程序的调用方式是_cdecl 而win的调用线程函数方式要求__stdcall
win创建线程 (CRT 运行时C函数库)_beginthreadex <process.h>
win签名CALLBACK 和WINAPI 都是__stdcall
thread类 <thread> , 11
window 平台获取 线程ID:pthread_t pthread_self(); DWORD GetCurrentThreadId();
Linux获取线程ID: pthread_create(&threadid...) ; pthread_self(); syscall(SYS_getid);
c++11 获取线程ID:
等待线程结束 : pthread_join()