自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白熊的窝

那就这样吧~

  • 博客(17)
  • 收藏
  • 关注

原创 Effective C++ Item13:以对象管理资源

以对象管理资源假设我们用一个程序库来模拟投资, 各样的投资类型都继承于一个root class:class Investment{ ...}这个程序库通过一个工厂函数来返回特定的对象:Investment* createInvestment();当我们使用这个返回对象之后, 需要删除他,设计个函数f来做这个事:void f(){ Investment* pInv = createInvestment(); ... delete pInv;}这个函数其实并不能保证最后一定会

2021-11-01 21:23:50 106

原创 Effective C++ Item12:复制对象时勿忘其每一个成分

自动生成的拷贝构造函数会帮我们将对象的所有部分都进行拷贝,如果我们自己声明拷贝构造函数:void logCall(const std::string& funcName);class Customer{public: ... Customer(const Custom& rhs); Customer& operator=(const Custom& rhs); ...private: std:string name;};Customer::Custo

2021-10-26 21:27:01 117

原创 Effective C++ Item11: 在operator= 中处理自我赋值

自我赋值自我赋值的行为即对象将值赋给自己:class Widget {...};Widget w;...w = w;注意,这是一个合法的赋值, 虽然不经常发生,而且这样的赋值并不总是能被很明显的看出来,比如:a[i] = a[j];or*px = *py;假设你建立一个class用于保存一个指针指向一块动态分配的位图:class Bitmap {...};class Widget{...private: Bitmap* pb;};下面我们重载等于运算符:Widge

2021-10-25 20:55:50 138

原创 Effective C++ Item10: 令operator=返回一个reference to *this

关于对于赋值, 我们可以将之写成连锁的形势:int x, y, z;x = y = z = 15;15先被赋给z, 然后z被赋值给y,然后结果再被赋值给x。为了实现连锁赋值, 赋值的操作符必须返回一个reference指向操作符的左侧实参,class Widget{public: ... Widget& operator=(const Widget& rhs) { ... return *this; } ...};这个协议不仅适用于以上的标准赋值形式

2021-10-19 21:49:52 85

原创 Effective C++ Item 09: 绝不在构造和析构过程中调用virtual函数

开始有一个class继承体系,用来模拟股市交易, 比如买进, 卖出的订单。交易是需要审计的,我们每创建一个交易对象, 就需要在审计日志中创建一个记录,示例如下:class Transaction{public: Transaction(); virtual void logTransaction() const = 0; ...};Transaction::Transaction(){ ... logTransaction();}class BuyTransactio

2021-10-17 22:16:06 66

原创 Effective C++ Item 08: 别让异常逃离析构函数

异常的处理析构函数抛出异常可被允许的:class Widget{public: ... ~Widget() {...}};void doSomething(){ std::vector<Widget> v; ...}如果v中包含多个元素, 当第一个元素在析构的过程中抛出异常,其余C++在析构的过程中不应该爆出异常。假设使用一个class负责数据库的连接:class DBConnection{public: ... static DBConnection

2021-10-11 21:35:44 127 1

原创 Effective C++ Item 07: 为多态基类声明virtual析构函数

声明virtual函数我们有一个TimeKeeper的基类, 有一些子类作为不同的计时方法。class TimeKeeper{public: TimeKeeper(); ~TimerKeeper(); ...};class AtomicClock : poublic TimeKeeper {}class WaterClock : poublic TimeKeeper {}class WritstClock : poublic TimeKeeper {}我们设计一个工厂函数, 使之返

2021-10-10 19:38:13 54

原创 Effective C++ Item 06: 若不想使用编译器自动生成的函数, 就该明确拒绝

考虑一个地产中介, 他售卖的商品是房子, 中介软件系统会有一个class来描述所售的房屋:class HomeForSale {...}如果说每一套房子都是不同的,我们为这个类的对象做一份副本就没有意义,所以你希望对这个类对象的拷贝会失败:HomeForSale h1;HomeForSale h2;HomeForSale h3(h1); // 通过h1拷贝构造h3, 会失败。h1 = h2; // 试图拷贝h2, 会失败。如果是普通的函数, 你只需要不声明这个函数,

2021-10-05 16:09:20 58

原创 Effective C++ Item 05: 了解C++默默编写并调用哪些函数

当你写了一个空的class时, 尽管你并没有声明构造函数和析构函数, 编译器还是帮你醉了例如你写了一下代码定义了一个空的class:class Empty {}:在经过编译器的处理之后, 实际等于如下代码:class Empty{public: Empty(){} ~Empty(){} Empty(const Emtpy& rhs){} Empty& opreator=(const Empty& rhs) {}};编译器为你自动生成了构造函数,析构函数,.

2021-10-04 16:04:47 51

原创 Effective C++ Item 04: 确定对象初始化

未初始化的对象如果顶一个一个int型变量没有初始化,int a;在某些编译器上不会通过编译, 会有一个uninitialized local variable的编译错误。如果在类中有一个未初始化的成员变量, 则成员变量的状态为未定义:class Test{public: int a, b;};我们的处理办法是永远在使用对象之前将其初始化,对于内置类型,可以手动初始化:int a = 0;自定义类型的对象, 需要使用构造函数来进行初始化:...

2021-09-25 21:25:44 249

原创 Effective C++ Item 03: 尽可能使用const

const 关键字指针常量, 常量指针char example[] = "This is a test"; //string for testchar* pointer = example;char* const pointer = example; // 指针常量,pointer所指向的对象不能变const char* pointer = example; // 常量指针,pointer所指向对象的值不能变用于容器的迭代器std::vector<int> vec;const

2021-08-12 16:52:26 72

原创 Effective c++ Item 02: 尽量用const, enu, inline 替换 #define

想说的话开坑effective c++, 其实书是要看的, 但是重要的还是自己的实践, 我在看书的时候就发现, 如果我们的产品代码里有相似的印证的话, 书看起来就很容易明白, 如果类似的用法没怎么见过, 就会费一些时间来想为什么会这样。所以想开个坑说一下自己的理解, 也防止以后忘了 ????....

2020-04-27 21:32:12 197

原创 shell和makefile中关于string变量的一个小区别

问题的小解释最近在修改一个shell脚本时发现了一个小问题, 使用makefile调用python脚本时, 在给python传递参数中我用双引号包裹了变量名, 目的是为了防止变量名中含有空格会让参数产生错误,具体的表现形式大概如下:shell python3 test.py --version “(VERSION)"−−date"(VERSION)" --date "(VERSION)"−−d...

2019-11-02 19:52:14 197

原创 代码行数统计工具cloc

介绍在工作中经常会有统计代码行数的需要, 在这儿介绍一个很不错的代码行数统计工具, cloc, 这个一个开源软件,主页在here, 默认输出的格式非常友好, 支持linux和window平台,而且在ubuntu上可以直接通过apt-get 来安装(ubuntu16.04)仓库中的版本有bug,大家尽量使用18.04中的版本。常用的功能我个人在使用的时候感觉最经常用的就是排除功能,在统计的时候...

2019-07-14 20:52:39 1306

原创 C++关于rand()函数的使用以及随机数的生成问题

前一段做项目的时候,使用了rand()函数产生了1024*150个随机数,当时并没有了解rand()的用法, 突然间发现每次的结果都一样,才自己去看了一下这个函数的机制.&nbsp;rand()函数介绍rand()是std标准库中的声明的函数,包含在c++头文件&lt; stdlib &gt;中, 其本质是一个伪随机数生成器(pseudorandom number generator), 其...

2019-03-09 20:33:31 3407

原创 Linux中的setuid简介

最近在项目中有一个需要给root权限的脚本, 因此详细看了一下关于Linux中setuid的使用方法, 在此做一下整理.关于ruid和euid首先需要明确一下Linux进程中ruid和euid的概念.每一个Linux进程都会包含这两个uid.ruid(real user ID):ruid可以理解为哪个用户执行了这个程序或者文件, ruid就是谁.euid(effective user ...

2019-01-19 14:26:46 23535

原创 c++ 类的成员变量初始化

最近在做一个关于boost的项目, 修改将原本的多个commandline进行合并精简,合并成一个path路径, 然后再加上不同的hardcode的文件名组成一个完整的路径。由于在使用ptree时会调用静态方法创建一个instance的类, 因此这里需要使用静态成员变量。大概整理了一下以前没有注意过的类的成员变量的初始化。###普通成员变量普通成员变量的初始化可以在构造函数中进行赋值, 也可以...

2019-01-19 12:41:02 765

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除