问题
C++ 中析构函数可以为纯虚函数吗?
可以为纯虚函数,如果基类将析构函数设置为纯虚函数,那么基类就会成为抽象类,是不能创建对象的。且如果基类不提供纯虚析构函数的定义的话,使用基类指针指向派生类对象会出现无法解析的外部符号命令错误,所以基类同时也必须提供纯虚析构函数的定义。
实现
#define max(a, b, c)
#define max(a, b, c) (a > b ? (a > c ? a : c) : (b > c ? b : c))
C++ 中引用和指针的区别?
- 引用是别名,在函数内操作一个通过传引用方式传入的变量,相当于直接操作函数外原本的变量。指针是一个变量,但是不同于一般变量,指针存放的是内存地址。传指针方式传入函数内的指针,只是拷贝外部指针的副本,可以在函数内修改它们共同指向的内存区域,但是却无法在函数内修改函数外指针本身。
- 声明方式不同,一个通过
&
,一个通过*
。 - 引用一旦绑定不可更改,指针可以更改指向地址。
- 引用是和绑定变量共享内存的,并不另外为引用开辟一块内存。指针是一个独立的变量,需要占据内存,且可改变它存储的内容。
- 引用不可以绑定到
null
值,指针可以直接指向null
值。 - 不可以创建引用数组,可以创建指针数组。
int & a[];
std::unordered_map/std::map的区别?
unordered_map
内部采用哈希表实现,所有元素是无序的,map
内部采用自平衡BST类似红黑树实现,除内置类型外,自定义类型在插入时需要重载比较<
运算符帮助每次插入元素时进行比较,所以map
中的元素是有序的。unorder_map
查询、插入和删除时间平均是O(1),最坏的情况是O(n),map
查询log(n),插入和删除是log(n)+恢复平衡的花销。
waiting...