Cpp tips
野指针:
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。
无名命名空间
https://blog.csdn.net/bulebin/article/details/122764594
类与结构体的前向声明(forward declaration)
https://blog.csdn.net/leigelaile1/article/details/80622429
C++11特性之default/delete
https://www.geeksforgeeks.org/explicitly-defaulted-deleted-functions-c-11/
C++11 标准引入了一个新特性:”=default”函数。程序员只需在函数声明后加上“=default;”,就可将该函数声明为 “=default”函数,编译器将为显式声明的 “=default”函数自动生成函数体。
为了能够让程序员显式的禁用某个函数,C++11 标准引入了一个新特性:”=delete”函数。程序员只需在函数声明后上“=delete;”,就可将该函数禁用。
C++之虚函数和虚函数表
https://mp.weixin.qq.com/s/I1pRg0J6w84xtCWHnIrgcQ
虚继承(virtual inheritance)机制
虚继承的目的是令某个基类作出声明,承诺愿意共享它的基类。其中,共享的基类子对象称为虚基类。在这种机制下,不论虚基类在继承体系中出现多少次,在派生类中都只包含唯一一个共享的虚基类子对象。
当虚继承时:无论是单虚继承还是多虚继承,需要有一个虚基类表来记录虚继承关系,所以此时子类需要多一个虚基类表指针;而且只需要一个即可。
https://songlee24.github.io/2014/07/17/cpp-inheritance/
https://www.cainiaojc.com/note/qadsok.html
C++ 中指针和引用的区别
A pointer in C++ is a variable that holds the memory address of another variable.
A reference is an alias for an already existing variable. Once a reference is initialized to a variable, it cannot be changed to refer to another variable. Hence, a reference is similar to a const pointer.
https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html
sizeof(void*)
sizeof(void*)的含义就是获取一个指针的大小。指针的本质就是内存地址,因此指针的大小和内存空间有关。x86就是4 byte,x64就是8 byte.
c++filt
c++filt -t _ZN6apache6thrift9transport7TSocketC1ERKSsi
ldd命令
readelf -S
nm -A -C libthrift.a | grep apache::thrift::transport::TSocket::TSocket
linux 缺少动态连接库.so–cannot open shared object file: No such file or directory
一、final修饰类的虚函数
final的用法是写在虚函数的后面,告知后面继承该类的类不可以再重写该虚函数
左值:在C++11中可以取地址的、有名字的就是左值
右值:不能取地址的、没有名字的就是右值(将亡值或纯右值)