高效使用c++的80个技巧
这个专栏将会告诉你如何更具时效的设计并实现c++软件:让它行为更正确,面对异常时更健壮,更有效率,更具移植性,将语言特性发挥的更好,更优雅地调整适应,在”混合语言“开发环境中运行的更好,更容易被正确运用,更不容易被误用。
Sefr后端
关注我,一起进步
展开
-
【c++语言特性—面试必考点】第七篇:效率(二)
智能指针类当你一智能指针取代内建指针的时候,你将获得各类指针行为的控制权1.析构与构造【我们通常可以决定一个对象产生或者销毁时应该做什么。通常我们会给智能指针一个默认值0;当最后一个智能指针被销毁时,智能指针有责任删除他们所指对象】2.复制与构造【当一个智能指针被复制或者涉及赋值动作时,你可以控制发生什么事】3.解引【当客户解引用指针所指之物时,,你有权决定发生什么事】template<class T>class SmartPtr{public: SmartPtr(T.原创 2021-09-02 20:43:09 · 86 阅读 · 0 评论 -
【c++语言特性—面试必考点】第七篇:效率(一)
将constructor与non-member function虚化限制某个class所能产生的对象:将构造函数放入private中就可以避免class产生过多的对象;使用也能引用计数类来解决这个问题要求(禁止)对象产生于heap之内要求对象产生于heap之内,我们只能阻止类不得使用new以外的方法产生对象:将析构函数设为protected我们设计一个抽象基类来验证一个对象是否位于heap之内:这个class提供的list数据结构,记录着所有由operator new 返回的指针。如果.原创 2021-08-30 17:28:18 · 77 阅读 · 0 评论 -
【c++语言特性-面试必考点】第七篇:异常(三)
传递对象到函数去,或是以对象调用虚函数和将对象抛出成为一个exception之间,有3个主要差异:第一:exception objects 总是会被复制,当以by value 的方式捕捉的时候会被复制两次。传递给函数参数的对象不一定得复制。第二:被抛出成为exception的对象时候,其转型操作比“传递给函数参数”的对象少。第三:catch子句以其“出现在源码的顺序”被编译器检验对比,其中第一个匹配成功,便执行。而当我们对于某个对象调用一个虚函数的时候,被选中的是那个“最佳匹配的类型”的函数。而不是源代..原创 2021-08-27 20:47:17 · 88 阅读 · 0 评论 -
【c++语言特性-面试必考点】第七篇:异常(二)
在constructors内阻止资源泄漏针对数据成员是指针的类,如果你以auto_ptr对象来取代pointer class members ,你便可避免异常出现时发生资源泄漏的可能性,不需要在destructors内手动释放资源。class BookEntry{ public: ... private: Image*const theImage; AudioClip* const theaudioclip;};BookEntry::Book.原创 2021-08-26 09:40:41 · 133 阅读 · 0 评论 -
【c++语言特性—面试必考点】第六篇:异常(一)
利用destructor避免资源泄漏=》利用对象来存放资源【有时在析构函数之前会发生异常,导致析构函数无法被执行,从而导致内存泄漏。】利用智能指针(自动析构)//智能指针是一个类里面维护了一个指针。同时含有构造函数与析构函数。viod processadotions(istream& datasources){ auto_ptr<ALL>pa(readALL(datasources)); pa->processadoption();}设计一个类.原创 2021-08-23 21:27:13 · 101 阅读 · 0 评论 -
【c++语言特性—面试必考点】第五篇:操作符
定制的类型转换函数第一,尽量不要提供类型转换函数,害大于利;因为在你未打算,未预期的情况下,此函数可能被调用,可能产生一系列的,不正确的程序行为,很难调试第二,类型转换函数有两个:单自变量构造函数与隐式类型转换符class Name{public: Name(const string& s);可以将string转换为Name ...};class Rational{public: ... operator double()const;//此.原创 2021-08-22 15:26:10 · 101 阅读 · 2 评论 -
【c++语言特性—面试必考点】第四篇:非必要不提供default constructor
非必要不提供default constructor default constructor的意思是在没有外来信息的情况下,为对象进行默认初始化,数值对象可以被初始化为0或者一个无意义值,指针可能被初始化为NULL,或者无意义值,像数据结构如Link lists,hash tables,maps等,被初始化为空容器。 但是对于某些类的对象你进行默认初始化,产生出来的对象将毫无意义,比如姓名册,设备识别编号之类的。这几乎总是造成class内的其他member function变得复杂,因.原创 2021-08-07 11:09:05 · 133 阅读 · 0 评论 -
【c++语言特性—面试必考点】第三篇:数组多态不要混用!
绝对不要以多态方式处理数组继承的一个重要性质为:通过父类的指针或者引用来操作子类对象。同时c++也允许你通过父类的指针或者引用来操作子类对象所形成的数组,但是这并不会如你所预料那样般的运作。class BST{};class BalancedBST:PUblic:BST{};void printBSTarray(ostream&os,const BST array[],int numelements){ for(int i=0;i<numelements;++i){ .原创 2021-08-06 09:32:32 · 134 阅读 · 0 评论 -
【c++语言特性—面试必考点】第二篇:4个转型操作符
最好使用c++的转型操作符c++的转型操作符有4个:static_cast,const_cast,dynamic_cast,reinterpret_caststatic_cast//假如你想将int转型为doubleint num1,num2;static_cast<double>(num1)/num2;const_cast//const_cast是用来剔除某个对象的常量性或变易性,却无法进行继承体系下的转型操作class w{};class swe:public w {.原创 2021-08-05 09:38:45 · 80 阅读 · 0 评论 -
【c++语言特性—面试必考点】第一篇:指针与引用的区别
仔细区别pointer与referencepointer采用*与->操作符,reference采用()操作符。首先reference没有null reference,所以在使用reference的时候不需要检测其有效性。而使用pointer可以指向对象,也可以不指向任何对象,为空指针,所以在使用的时候要检测其有效性。void printdouble(const double& x){ cout<<x<<endl;}void printdouble.原创 2021-08-04 08:56:06 · 87 阅读 · 0 评论