effective cpp
文章平均质量分 86
NUS_Ryan
985计算机科学与技术本科,新加坡国立大学Master of Computing Computer Science Specilization研究生,曾担任字节跳动推荐算法实习生,北京大学Net Lab实习工程师,北京大学国家视频与视觉技术中心研究实习生,Yale University研究工程师, Amazon软件工程师实习生,暑期实习曾收获Offer: Microsoft ,Baidu, Meituan, Ant Group
展开
-
Effective C++(七):inline关键字, 降低文件间依存关系
这个问题的根源出在编译器必须在编译期间知道对象的大小,如果看不到类的定义式,就没有办法为对象分配内存。这样,假如我们要修改Person的private成员,就只需要修改PersonImpl中的内容,而PersonImpl的具体实现是被隐藏起来的,对它的任何修改都不会使得Person客户端重新编译,真正实现了“类的接口和实现分离”。毫无疑问的是,句柄类和接口类都需要额外的开销,句柄类通过 Person 类中的指向PersomImpl的指针来获得对象数据,增加一层间接访问,指针大小和动态分配内存带来的开销;原创 2023-12-08 16:11:09 · 987 阅读 · 0 评论 -
Effective CPP(五): 设计接口的原则
由于std::swap函数在 C++11 后改为了用std::move实现,因此几乎已经没有性能的缺陷,也不再有像原书中所说的为自定义类型去自己实现的必要。不过原书中透露的思想还是值得一学的。如果想为自定义类型实现自己的swap方法,可以考虑使用模板全特化,并且这种做法是被 STL 允许的:public:private:templatea.swap(b);原创 2023-12-07 16:31:58 · 975 阅读 · 0 评论 -
Effective C++(四): 资源管理
为了防止忘记调用 delete 造成的内存泄露,我们应该尽可能让对象管理资源,并且采用 RAII 机制(Resource Acquisition is Initialize)机制,让析构函数负责资源的释放。原创 2023-12-02 23:01:21 · 972 阅读 · 0 评论 -
Effective CPP(三):类的构造/析构/赋值运算
如果在基类中定义了虚析构函数,在删除对象释放资源的时候,会首先调用派生类的析构函数,再调用基类的析构函数。假如第四点条款没有被遵守,在调用基类的构造函数以期望调用派生类中已经重写的虚函数的时候(比如使用基类的指针构造派生类),会意外执行到还没有被重写的虚函数。如果想要基类在构造的时候就得知派生类的构造信息,推荐的做法是在派生类的构造函数中将必要的信息向上传递给基类的构造函数。在创建派生类对象的时候,基类的构造函数会早于派生类的构造函数调用, 基类的析构函数会晚于派生类的析构函数被调用。原创 2023-12-02 20:27:17 · 846 阅读 · 0 评论 -
Effective C++(二):对象的初始化
这种做法的好处在于函数内的局部静态对象 td 会在该函数 tempDir被调用的时候被初始化,fs也只会在 tfs()被调用的时候被初始化,不仅让静态变量初始化的顺序可控,而且节省了资源,在没有必要创建他们的时候不进行类变量的创建。为了避免这种开销和潜在的线程安全问题,一种常见做法是在程序的单线程启动阶段(即在多线程被创建之前)手动初始化这些静态局部变量。这是由于 C++对于定义在不同编译单元中的全局静态对象的初始化的相对次序并没有明确定义,因此,下列代码可能会出现使用未初始化静态对象的情况。原创 2023-12-02 18:03:43 · 418 阅读 · 0 评论 -
Effective C++(一): Const Correctness, Const成员函数和Const Cast
有关 const 的用法是 cpp 中一个非常经典且易错的部分,在面试和日常工作中各种各样的 const 经常让人摸不着头脑,今天就来根据 const 扮演的不同角色来归纳有关 const 的不同用法。原创 2023-12-02 17:27:56 · 965 阅读 · 0 评论