Effective C++
文章平均质量分 66
拉普拉斯妖1228
这个作者很懒,什么都没留下…
展开
-
学懂现代C++——《Effective Modern C++》之转向现代C++
现代C++中像auto、智能指针、移动语义等都是一些重大的优化特性,但也有一些像constexpr、nullptr等等这样一个小的特性。这章的内容就是这些小特性的集合。原创 2023-09-27 17:03:41 · 112 阅读 · 0 评论 -
学懂现代C++——《Effective Modern C++》之类型推导和auto
本文主要对《Effective Modern C++》的前两章——类型推导和auto,做了知识点的总结。书中有更详细的推导和讲解过程,感兴趣的同学还是强烈建议大家去读原书。原创 2023-04-10 20:47:16 · 933 阅读 · 1 评论 -
《More Effective C++》技术篇——Reference counting(引用计数)
Reference counting这项技术,允许多个等值对象共享同一实值。此技术的发展有两种动机,第一是为了简化heap object周边的簿记工作。它可以消除“记录对象拥有权”的负荷,因为当对象运用了reference counting技术,它便拥有它自己。一旦不再有任何人使用它,它便会自动销毁自己。reference counting的第二个发展动机则只是为了实现一种常识。如果许多对象有相同的值,将那个值存储多次是件愚蠢的事。最好是让所有等值对象共享一份实值就好。以下是一个包含了Copy-O..原创 2021-12-08 17:48:05 · 590 阅读 · 0 评论 -
《More Effective C++》技术篇——要求(或禁止)对象产生于heap之中
要求对象产生于heap中,意思是需要阻止clients不得使用new以外的方法产生对象。比较好的方法就是将destructor定义为private,因为constructor的类型太多,所以仍然将constructor定义为public。然后定义一个pseudo destructor来调用真正的destructor。示例如下:class HeapBasedObject {public: HeapBasedObject() {} void destroy() const { delet.原创 2021-10-31 17:44:50 · 123 阅读 · 0 评论 -
《More Effective C++》技术篇——限制某个class所能产生的对象数量
如下例,只要继承Counted template就可以限制class所能产生的对象数量,超过了设置的maxObjects就会抛出异常。#include <stdlib.h>#include <iostream>template<class BeingCounted>class Counted {public: class TooManyObjects{}; //这是可能被抛出的exceptions。 static int objectCou.原创 2021-10-24 16:11:32 · 93 阅读 · 0 评论 -
《More Effective C++》总结笔记(三)
效率条款16:谨记80-20法则80-20法则说:一个程序80%的资源用于20%的代码身上。是的。80%的执行时间花在大约20%的代码身上,80%的内存被大约20%的代码使用,80%的磁盘访问动作由20%的代码执行,80%的维护力气花在20%的代码上面。不必拘泥于法则的数字,其基本重点是:软件的整体性能几乎总是由其构成要素(代码)的一小部分决定。从某个角度看,80-20法则暗示,大部分时候你所产出的代码,其性能坦白说是平凡的,因为80%的时间中,其效率不会影响系统整体性能。或许这不至于对你的自尊心原创 2021-03-07 14:20:52 · 196 阅读 · 0 评论 -
《More Effective C++》总结笔记(二)——异常
异常条款9:利用destructors避免泄露资源只要坚持这个规则,把资源封装在对象内(类似智能指针shared_ptr),通常便可以在exceptions出现时避免泄露资源。简单来说就是,当有资源可能在函数抛异常时而无法释放,这时可以将资源封装到对象内(RAII),利用对象的析构函数来自动释放资源,这样即使有exceptions发生,也不会有资源泄露。条款10:在constructors内阻止资源泄露(resource leak)C++只会析构已构造完成的对象。对象只有在其construc原创 2021-02-05 16:40:06 · 110 阅读 · 0 评论 -
《More Effective C++》总结笔记(一)——基础议题、操作符
基础议题条款1:仔细区别pointers和references首先你必须认知一点,没有所谓的 null reference。由于reference一定得代表某个对象,C++因此要求references必须有初值。Pointers和references之间的另一个重要差异就是,pointers可以被重新赋值,指向另一个对象,reference却总是指向(代表)它最初获得的那个对象。结论:当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由pointers原创 2020-12-25 17:13:25 · 180 阅读 · 0 评论