• C++的大坑


    https://www.eet-china.com/mp/a49223.html

    无符号整数的错误使用

    for (unsigned int i = 10; i >= 0; --i) { ... }

    上面这段代码会发生什么? 会死循环,这里要注意下无符号整数的使用。

    容器的size()返回类型是无符号整数

    std::vector<int> vec;
    vec.push_back(1);
    for (auto idx = vec.size(); idx >= 0; idx--) {    
        cout << "===== \n";
    }

    memcpy、memset只适用于POD结构. 

    什么事pod 结构 就是很结构很存粹。 自己理解吧。   https://blog.csdn.net/Jxianxu/article/details/80524526       https://zhuanlan.zhihu.com/p/45545035

    STL遍历删除时注意迭代器失效问题   

       https://www.cnblogs.com/zhangkele/p/10538144.html 字节博客的 

    容器分为三类  数组类型  链表类型  关联容器类型 失效的情况也不统一 注意细节

    std::list排序使用自己的成员方法    一般的容器排序都使用std::sort(),但是list特殊。

    int main() {
     std::list<int> list{1, 2, 3, 2};
     list.sort(); //
     //sort(list.begin(), list.end());  // 容器中list 是有两种排序算法 但是输入 一种是默认的 一种是 函数对象或者 lambda   但是不是类似其他容器那样传入 迭代器 看下面的链接去吧
     for (auto i : list) {
        std::cout << i << " ";
     }
     std::cout << "\n";
     return 0;
    }
       
    https://blog.csdn.net/baidu_35679960/article/details/79592318  //看这个链接

    基类析构函数要是虚函数

    如果不是虚函数的话,可能会有内存泄漏的问题 项目中真实的踩过坑哈  要注意呀

    new/delete、new[]/delete[]、malloc/free严格配对

    成员变量初始化  

    成员变量没有默认初始化行为,需要手动初始化   这个也踩过坑 要自己初始化 不要依赖编译器  

    不要返回局部变量的指针或引用 

     常见问题哈 没什么好说的 

    vector clear和swap问题   

     vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

     首先要理解这两个api 最终带来的结果是什么 尤其是  clear 会改变什么   clear 并不会释放我们的内存空间 只会改变容器的 size 并不会改变 capctive 容量

    https://blog.csdn.net/wangshubo1989/article/details/50359750
    https://blog.csdn.net/a272846945/article/details/51182144

    vector问题  尽量不要在vector中存放bool类型,vector为了做优化,它的内部存放的其实不是bool

    异步操作中async的使用.          目前没有踩过这个坑  下次研究下

    std::async 这货返回的 future 和通过 promise 获取的 future 行为不同,async 返回的 future 对象在析构时会阻塞等待 async 中的线程执行完毕,这就导致在大部分场景中 async达不到你直觉的认为它能达到的目的。

    智能指针

    一个裸指针不要使用多个智能指针包裹,尽可能使用make_unique,make_shared。

    当需要在类的内部接口中,需要将this作为智能指针使用,需要用该类派生自enable_shared_from_this。 为什么要这么做呢? 待补充

    栈内存使用

    合理使用栈内存,特别是数组,数组越界问题容易导致栈空间损坏,可以考虑使用std::array替代普通的数组。  为什么 ?有什么黑科技吗? 研究下? 待补充

    std::remove的使用

    这个remove其实并没有真正的删除元素,需要和erase配合使用,跑一下这段代码就知道啦。 

     https://www.cnblogs.com/jingyg/p/5613303.html

    https://blog.csdn.net/gx864102252/article/details/78484297   还是要在看下的 没有完全看明白

    全局变量初始化问题

    不同文件中的全局变量初始化顺序不固定,全局变量尽量不要互相依赖,否则由于初始化顺序不固定的问题,可能会导致bug产生。

    enum使用

    尽量使用enum class替代enum,enum class 是带有作用域的枚举类型。

    条件变量

    条件变量的使用有两大问题:信号丢失和虚假唤醒,相当重要,具体可以看我这篇文章《使用条件变量的坑你知道吗》。

  • 相关阅读:
    如何查看MySQL的当前存储引擎?
    避免生产环境执行更新删除语句忘记加where条件的解决方案
    物联网发展的现状
    目前行业内比较流行的开源时序数据库产品
    如何查看端口(3306)被那个程序占用
    MySQL数据库开发的36条军规
    介绍 MySQL 8 中值得关注的新特性和改进。
    IE浏览器 兼容性(IE9-11 差异说明)
    python3:(unicode error) 'utf-8' codec can't decode
    静态代码块
  • 原文地址:https://www.cnblogs.com/zhangkele/p/15647953.html
Copyright © 2020-2023  润新知