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.

svg viewerhttps://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中可以取地址的、有名字的就是左值

右值:不能取地址的、没有名字的就是右值(将亡值或纯右值)