C++技巧
RocWay007
这个作者很懒,什么都没留下…
展开
-
C++ 11的enable_shared_from_this
C++ 11的提供了一个模板类std::enable_shared_from_this。目的为安全获取当前对象的shared_ptr提供方便。原因一般在对象的函数中,是不可以返回一个指向this指针的shared_ptr。因为如果当前对象已经析构,当shared_ptr再次析构时,因为其管理的指针已经不再合法,所以会导致Undefined行为。如果实在有这种需求,就应该使用std::enable_shared_from_this提供的shared_from_this方法获取。使用class S原创 2022-05-06 23:55:28 · 400 阅读 · 0 评论 -
【解决】g++: error trying to exec ‘cc1plus’: execvp
项目场景:Linux编译安装gcc找不到cc1plus问题描述g++: error trying to exec ‘cc1plus’: execvp:原因分析:网上很多说gcc和g++版本不匹配,说重新安装的。拜托,不要再抄袭了。实际在linux系统中无法执行某个程序,要么是目标文件真不存在,要么存在,但是当前用户权限不足编译安装的gcc,由于要安装到/usr/local,所以需要高权限的用户。这时大家一般喜欢使用sudo make install。这里比较容易出现问题,sudo之后原创 2022-05-03 10:44:26 · 2236 阅读 · 0 评论 -
防止C++的类被继承
核心解决方法: 让目标类T,虚继承基类B。(虚继承迫使虚基类的任何层次的子孙都要显式地初始化虚基类。) B的构造函数私有, T是B的友元类。 实现方法:1. class T; class B{ friend class T; private: B() {} B(const原创 2008-03-13 14:12:00 · 2379 阅读 · 2 评论 -
__type_traits 编程纪要
Type Traits即类型属性。C++类型本身不具有某些我们感兴趣的属性信息,例如(拷贝)构造、析构函数,以及赋值运算符是否Trival,所以我们应当采用某些手段来记录这些信息。这些信息有助于针对某种类型选择最佳的方法。当然我们也可以在类中添加字段来记录这些信息,但这样一来增加了类的负担,二来只能在运行时访问,影响效率。最好的方式当然是在编译时刻就能确定。 先给出SGI STL中_原创 2008-04-08 16:40:00 · 1068 阅读 · 0 评论 -
异常安全的函数(方法)
所谓异常安全的函数是指:即便是在这个函数的调用过程中出现异常,也不会影响到重要的数据或状态。【异常安全原则】:尽量把可能抛出异常的代码写在函数的最前面,让异常尽量早地抛出,在改变重要数据或状态之前抛出异常。 让我们来比较两段代码:void f1(){ importantData.Invalidate(); data = getNewDat原创 2008-04-29 17:44:00 · 661 阅读 · 0 评论