作为一名合格C++程序员应该避免的一些坑

以下例子只有父类的析构函数被调用了。子类的析构函数并没有被调用,则产生错误。
这一点上,对于原始的指针、类或者std::unique_ptr。其表现是一致的。也符合C++基本的语法。
但是对于std::shared_ptr。即便父类析构函数并非虚函数,其子类的析构函数依然可以被调用。
对于此种行为的原因尚未查明(待更新)。也许这是std::shared_ptr专门设计的一种特性。但为谨慎起见,我们也未必需要此特性
父类有虚函数即使它没有成员变量它的sizeof在64位操作系统下也会达到8
在这里插入图片描述
在这里插入图片描述
//for memory
对malloc最好对返回值有个检查
在这里插入图片描述
在这里插入图片描述
对new来说不需要检查,new失败会抛异常离开作用域,但new数组的时候delete一定要加[]

在这里插入图片描述
以下例子remakeroom里会造成内存泄漏,因为传入的是值
在这里插入图片描述
以下例子info为局部变量,出了作用域就析构了返回的是一个野指针
在这里插入图片描述
以下例子调用未定义的结点程序崩溃,找不到的话会指向group的end,要检查一下find是否=end
迭代器++要放到迭代器变量的前面
在这里插入图片描述
删除所有特定值
可以用remove函数先把特定值都放在尾位返回第一个特定值的位置,然后通过erase删除
在这里插入图片描述
在这里插入图片描述
判断一个单链表是否有环,用两个指针,一个指针走一步,另一个指针走两步,判断两个指针是否相遇
在这里插入图片描述
左移和右移分为算术左右移和逻辑左右移,左移是一致的右移就不一样
linux下64有符号的
在这里插入图片描述
迭代器没有<这个比较,一般用!=,结束条件也用个迭代变量代替,如果用原生数组没有begin和end函数可以用std::begin,std::end代替
也可以用foreach让模板更加通用
在这里插入图片描述
在这里插入图片描述

如果知道元素个数用vector存储可以用reserve预先分配大小避免重分配造成迭代器失效,用insert效率高于push_back
在这里插入图片描述
当构造函数有抛出异常时应该先把数据都准备好再进行处理
在这里插入图片描述
在这里插入图片描述

发布了137 篇原创文章 · 获赞 33 · 访问量 1589

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104019943