![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
space01
AIoT
展开
-
std::shared_ptr如何释放管理权限并且不销毁管理的裸指针的资源
std::shared_ptr是一个智能指针,它会自动管理其指向的对象的生命周期。当std::shared_ptr的引用计数变为0时,它会自动删除其管理的对象。因此,通常情况下,我们不能让std::shared_ptr释放其管理的对象但不删除该对象。请注意,这种做法可能会导致内存泄漏,因为你需要手动删除p来释放内存。在这个例子中,当ptr的引用计数变为0时,它不会删除其管理的int(10),因为我们提供了一个什么都不做的删除器。然而,如果你确实需要这样做,你可以使用一个自定义的删除器。原创 2023-09-22 10:54:46 · 441 阅读 · 0 评论 -
C/C++ 静态变量初始化顺序的不确定性导致崩溃
但是如果还使用sg_map的定义放到函数register中作为局部变量使用就不会有这样的问题,原因是sg_map是一个局部静态变量,它在A::register函数中被定义。如果B::a的初始化过程早于sg_map,那么当调用register时,sg_map还未初始化,这时如何对sg_map进行insert操作就会产生崩溃,也就是segment fault错误。由于静态变量初始化顺序的不确定性导致的。如果使用静态变量,并且在不同的编译单元中有不同的静态变量,最好不要使用全局静态变量,而是使用局部静态变量。原创 2023-09-19 16:20:07 · 283 阅读 · 0 评论 -
Boost.TTI 检测是否包含指定的成员函数
通常有的时候,我们在使用C++编码需要判断一个类是否具有某个方法(成员函数),此时就可以使用Boost.TTI模块来实现。普通函数和静态函数都可以用来检测。1)检测普通成员函数首先声明要检测的成员函数名称,如这里检测类算法具有toString这个成员函数。然后,调用boost的方法has_member_function_xx来判定是否具有此方法,其中xx表示要检测的方法的名称,T表示要检测的类。#include <boost/tti/has_member_function.hpp原创 2022-05-12 10:27:11 · 330 阅读 · 0 评论 -
使用IDE编码时,读写二进制和文本的编码区别
当使用二进制模式读取文本文件时,读取的就是原始的二进制数据,没有任何编码,也不是ASCII码,最终在IDE中使用的是当前IDE编码方式,如果是GBK就是GBK,如果是utf8就是utf8。当使用文本模式读取文本文件时,读取的则是经过操作系统底层编码后的文本数据,如果使用的是GBK,则就是GBK;如果是utf8,则就是utf8,IDE不会再编码。...原创 2022-05-12 10:01:19 · 315 阅读 · 0 评论 -
GCC编译Debug版本正常,Release版本异常
解决方法:使用检查工具(如cppcheck)或者编译时查看warning信息,将所有的warning修复。主要检查每个函数的返回值是否遗漏,若遗漏,则两个版本的结果会不同,Release版本一般行为比较怪异。...原创 2022-05-12 09:48:41 · 384 阅读 · 0 评论 -
c++11 多线程使用注意
c++11 多线程的使用注意事项,主要围绕锁、线程阻塞和变量的使用。原创 2022-05-11 20:46:34 · 383 阅读 · 0 评论