C++随笔

1、new

一般情况下,如果new为申请到空间(内存耗尽的情况下),会抛出一个bad_alloc异常

通过nothrow可以阻止其抛出异常,用法如下:

char *p2 = new (nothrow)char;  // 申请失败后,会返回nullptr,不会抛异常

2、利用using代替typedef

using FunctionPtr = void (*)(); //相当于 typedef void (*FunctionPtr)();
 
FunctionPtr ptr = f;

3、相同类的各个对象互为友元

方框内的函数,就是在改变其他对象的私有成员变量

线程池实现

https://github.com/abseil/abseil-cpp/blob/master/absl/synchronization/internal/thread_pool.h

C++实现线程池_c++ thread使用lambda表达式初始化_蓬莱道人的博客-CSDN博客

C++11并发学习之六:线程池的实现_c++11并发学习之六 线程池的实现_草上爬的博客-CSDN博客

4、lambda表达式

C++11 之 lambda函数的详细使用_内核之道的博客-CSDN博客\

https://blog.csdn.net/CSDN_WHB/article/details/102023429

5、变长参数模板

template<class ... Types> struct Tuple { };

https://www.cnblogs.com/zenny-chen/archive/2013/02/03/2890917.html

6、Be alert for C++'s most vexing parse

https://www.cnblogs.com/yangyingchao/p/3394146.html

class Widget
{
public:
     Widget(){}
     virtual ~Widget(){}
     void Show(){}
 };
 
 Widget w();  // 本行可能会被编译器认为是一个函数声明(解决方法  Widget w;)
 w.Show();    // 由于上一行的问题,本行会报错

7、Be alert for C++'s most vexing parse    

class AsyncDestructHelper final {
 public:
    AsyncDestructHelper() {}
    ~AsyncDestructHelper() {}

    static AsyncDestructHelper* GetInstance() {
        static AsyncDestructHelper async_ins;
        return &async_ins;
    }

    template<typename Type>
    void AddDestructElement(std::unique_ptr<Type>&& element) {  // NOLINT
        thread_pool_.Schedule([&element]() mutable {
            element.reset();
        });
    }

 private:
    // ThreadPool 找开源即可
    static ThreadPool thread_pool_;
};

int main() {
    std::unique_ptr<int> i_t(new int);
    AsyncDestructHelper::GetInstance()->AddDestructElement(std::move(i_t));
}

C++编译原则 

      1、只要表达式可以被解析成 函数 ,那么该表达式 就会被编译器解析成函数 !

      2、给形参声明加上括号不合法,但给函数调用的实参加括号是合法的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值