c++
黑色的大白熊
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Effective C++ Item13:以对象管理资源
以对象管理资源假设我们用一个程序库来模拟投资, 各样的投资类型都继承于一个root class:class Investment{ ...}这个程序库通过一个工厂函数来返回特定的对象:Investment* createInvestment();当我们使用这个返回对象之后, 需要删除他,设计个函数f来做这个事:void f(){ Investment* pInv = createInvestment(); ... delete pInv;}这个函数其实并不能保证最后一定会原创 2021-11-01 21:23:50 · 220 阅读 · 0 评论 -
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 · 217 阅读 · 0 评论 -
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 · 233 阅读 · 0 评论 -
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 · 164 阅读 · 0 评论 -
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 · 134 阅读 · 0 评论 -
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 · 240 阅读 · 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 · 136 阅读 · 0 评论 -
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 · 109 阅读 · 0 评论 -
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 · 100 阅读 · 0 评论 -
C++关于rand()函数的使用以及随机数的生成问题
前一段做项目的时候,使用了rand()函数产生了1024*150个随机数,当时并没有了解rand()的用法, 突然间发现每次的结果都一样,才自己去看了一下这个函数的机制. rand()函数介绍rand()是std标准库中的声明的函数,包含在c++头文件< stdlib >中, 其本质是一个伪随机数生成器(pseudorandom number generator), 其...原创 2019-03-09 20:33:31 · 3677 阅读 · 0 评论 -
c++ 类的成员变量初始化
最近在做一个关于boost的项目, 修改将原本的多个commandline进行合并精简,合并成一个path路径, 然后再加上不同的hardcode的文件名组成一个完整的路径。由于在使用ptree时会调用静态方法创建一个instance的类, 因此这里需要使用静态成员变量。大概整理了一下以前没有注意过的类的成员变量的初始化。###普通成员变量普通成员变量的初始化可以在构造函数中进行赋值, 也可以...原创 2019-01-19 12:41:02 · 904 阅读 · 0 评论
分享