![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective C++
文章平均质量分 58
ZiiProgramming
一根野指针
展开
-
Effective C++ 条款15、16、17
条款15:在资源管理类中提供对原始资源的访问当你需要获取资源管理类中的原始资源时,一般由RAII class提供显示转换或隐式转换。auto_ptr和shared_ptr都提供了一个get成员函数,用来执行显示转换,也就是它会返回智能指针内部的原始指针(的复件)显示转换:class Font{public: ... FontHandle get() const {return f;}//显示转换函数,即提供一个获取原始资源的接口 ...private: FontHandle f;}原创 2021-08-20 16:32:46 · 120 阅读 · 0 评论 -
Effective C++ 条款13,14
条款13:以对象管理资源void f(){ Investment* pInv=createInvestment();//调用factory函数 ... delete pInv;}该段代码可能存在的问题:"…"区域内有一个过早的return语句“…”区域内的语句抛出异常将会使得资源泄露。为确保资源总是被释放,可把资源放进对象内 ,依赖C++的“析构函数自动调用机制”确保资源被释放。智能指针的实现便应用了以上思想:void f(){ std::auto_ptr<Investm原创 2021-08-19 17:25:00 · 190 阅读 · 0 评论 -
Effective C++条款12
条款12:复制对象时勿忘其每一个成分#include<iostream>class Date{public: Date()=default; Date(const int&month,const int&day) :m_month(month),m_day(day) {} void Init_Date() { std::cout<<"Please input month and d原创 2021-08-18 17:48:16 · 236 阅读 · 0 评论 -
Effective C++条款10,11
条款10:令operator=返回一个reference to *this为了实现“连续赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参,这是你为classes实现赋值操作符时应该遵循的协议Widget& operator=(const Widget& rhs){ ... return *this;}这个协议不仅适用于以上标准赋值形式,也适用于所有赋值相关运算(如+=)请记住:令赋值(assignment)操作符返回一个reference to原创 2021-08-17 22:31:44 · 122 阅读 · 0 评论 -
Effective C++ 条款08,09
条款08:别让异常逃离析构函数以下是一个将(必须要求调用的)close()函数置于析构函数内的demo:#include<iostream>class DtorExcetion{public: DtorExcetion()=default; DtorExcetion(int*data,const int&length) :m_length(length) { m_data=new int[m_length]原创 2021-08-14 22:53:10 · 99 阅读 · 0 评论 -
Effective C++ 条款07
条款07:为多态基类声明virtual析构函数一个factory模式下以Dog为base class的demo:#include<iostream>#include<cstdio>class Dog{public: Dog(){std::cout<<"Based ctor!"<<std::endl;} ~Dog(){std::cout<<"Based dtor"<<std::endl;}protected:原创 2021-08-12 23:10:11 · 188 阅读 · 0 评论 -
Effective C++ 条款05、06
条款05:了解C++默默编写并调用哪些函数如果写下:class Empty(){ };就好像你写下:class Empty{public: Empty()=default;//default构造函数 Empty(const Empty&rhs){...}//copy构造函数 ~Empty(){...}//析构函数 Empty& operator=(const Empty&rhs){...}//copy assignment操作符};原创 2021-08-11 16:37:52 · 173 阅读 · 0 评论 -
Effective C++ 条款04
条款04:确定对象被使用前以先被初始化最佳的处理办法是:永远在使用对象之前将它初始化。1.内置类型手工完成2.自定义类型通过构造函数完成注意:不要混淆了赋值(assignment)和初始化(initialization)对象的成员变量的初始化动作发生在进入构造函数本体之前(对象的默认构造函数将被调用)用member initialization list(成员初值列)替换赋值动作使用成员初值列调用对象的拷贝构造函数进行初始化,效率高于先调用默认构造函数再进行赋值的操作Defaul原创 2021-08-09 17:14:19 · 146 阅读 · 0 评论 -
Effective C++ 条款03
条款3——尽可能使用constconst修饰的各种类型char greeting[]="Hello"; char* p=greeting;//non-const pointer,non-const data const char*p=greeting;//non-const pointer,const data char* const p=greeting;//const pointer,non-const data const char*const p=greeting原创 2021-08-06 22:21:23 · 176 阅读 · 0 评论 -
Effective C++ 条款00
Effective C++ 条款00——导读(在构造函数前)使用关键字explicit以避免不希望出现的隐式转换示例:class Widget{public: explicit Widget(int x=0,bool y=true){}};void Func(Widget widget){ std::cout<<"Func is called!"<<std::endl;}Func(20);//错误,int 20无法通过构造函数隐式转换成Widget obj原创 2021-08-01 17:11:21 · 71 阅读 · 0 评论 -
Effective C++条款01、02
条款01——视C++为一个语言联邦将C++拆分为以下四种次语言:CObject-Oriented C++Template C++STL请记住:C++高效编程守则视状况而变化,取决于你使用C++的哪一部分条款02——尽量以const,enum,inline替换#define可理解为“宁可以编译器替换预处理器”。假设定义一个宏常量:#define PI 3.1416,若此定义未被编译器看见,且假设定义该常量的头文件并非你所写,编译器给出的错误信息也许只提到3.1416而无PI,故很难追原创 2021-08-03 18:00:20 · 460 阅读 · 0 评论