C++
文章平均质量分 62
push_rbp
这个作者很懒,什么都没留下…
展开
-
记录智能指针和string使用中发现的问题
在c++11中,想要智能指针指向数组,需要这样写intint注意两个shared_ptr和unique_ptr的模板参数不同。但是只有这样写在c++11中才能编译通过。但是在c++11 中, shared_ptr这种写法是有问题的。但是unique_ptr这种做法是正确的。因为shared_ptr的默认删除器是delete,指向数组时模板参数依然是单个元素类型,所以析构会调用delete 而不是delete[], 造成内存或资源泄露解决办法:1:升级到c++17。原创 2023-02-09 00:02:18 · 147 阅读 · 0 评论 -
c++一种反射机制,判断类中是否存在特定的函数
c++语言本身并没有提供反射机制,倒是有一个比较基础的RTTI,利用c++的模板特性,SFINAE,可以实现一些反射功能,先看代码: 在这里插入代码片原创 2021-05-30 23:08:56 · 812 阅读 · 1 评论 -
C++ SFINAE和 enable_if
c++中的SFINAE和enable_if,如果经常写模板的话,应该听到看到这些东西. SFINAE 首先介绍下SFINAE,参考官方介绍,中文是“模板替换失败不是一种错误”,看个代码示例 class Test { using newType = int; }; // 1 template<typename T> void f(T arg) { cout<<"old type"<<endl; } // 2 template <typename T> v原创 2021-05-30 18:14:58 · 211 阅读 · 0 评论 -
C++ 11 decltype 与auto
c++11 新特性中,用的比较多的应该是类型推导了,类型推导有两种,auto与decltype,先说说auto. 1: auto auto在使用时,最需要注意的应该auto会去掉CV(const , volatile)属性与引用,细说的话有三种情况: 1:auto 后没有引用或指针 int a = 1; const int ca = 1; const int &caref = 1; auto a1 = a; auto a2 = ca; auto a3 = caref; template<ty原创 2021-05-19 00:33:51 · 105 阅读 · 0 评论 -
奇异递归模板模式
奇异递归模板模式(可参见wiki)在一般的编程中应该是不多见的,笔者在书籍上(陈硕的linux 服务器端开发 和more effective中有见过),后来在实际开发中没想到还真的碰到了,这个在元编程中应该还是比较常见的。 template <class T> struct Base { void interface() { // ... static_cast<T*>(this)->implementation();原创 2021-05-07 23:59:52 · 261 阅读 · 0 评论