C++,异常、转换函数、智能指针

目录

一、异常

1 C++ 异常机制:

2 使用try catch进行异常处理.

3、c++ 已经内置标准异常类,专业用于抛出的语法中

4 自定义异常:

5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

二、转换函数

三、智能指针

1 unique_ptr,

2 shared_ptr

3 weak_ptr


一、异常

1 C++ 异常机制:

        可以让程序在即将发生异常前被处理,不会让程序因为发生异常而终止。

2 使用try catch进行异常处理.

处理执行try块的代码,如果执行throw 数据, 则try中余下的代码都不执行,进行进入catch中执行,而catch中参数会收到throw 执行出的数据。catch执行结束后,程序从catch后面的代码继续执行

抛出的该数据可以是基础类型,也可是对象.

示例1: 抛出int型数据

C++,异常、转换函数、智能指针_第1张图片

示例2:抛出字符串

C++,异常、转换函数、智能指针_第2张图片

示例3:抛出对象

该示例是一个不规范的示例,此处给出,只为讲清楚异常的机制

C++,异常、转换函数、智能指针_第3张图片

3、c++ 已经内置标准异常类,专业用于抛出的语法中

异常类使用时, 导入,并且异常类的名称空间为std

示例1:抛出exception异常

C++,异常、转换函数、智能指针_第4张图片

示例2:抛出invalid_argument异常

该异常对象构造函数还字符串参数。

C++,异常、转换函数、智能指针_第5张图片

4 自定义异常:

    一般继承exception来实现,理论上也可以通过继承exception的子类来实现

C++,异常、转换函数、智能指针_第6张图片

5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

示例1:

C++,异常、转换函数、智能指针_第7张图片

 在函数后面指定能抛出的异常数据类型

 指定抛出的是类时,实计抛出的可以是指定类和派生类的对象

    如果函数抛出throw()则表示不能抛出异常,该方式现在已经建议使用(11版本开始) const noexcept代替,就像前面使用const char* what() const noexcept , 表示不能抛出异常。

C++,异常、转换函数、智能指针_第8张图片

二、转换函数

1 概念:

转换函数的实质就是运算符重载,只是重载的运算符不是内置的运算符而是类名这个特殊的自定义类型。

2 自定义转换函数

(1)语法形式:

operator 类型名( )

{

    实现转换的语句

}

(2)转换函数的基本规则:

转换函数只能是成员函数,无返回值,空参数。

不能定义到void的转换,也不允许转换成数组或者函数类型。

转换常定义为const形式,原因是它并不改变数据成员的值。

explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换

(3)示例:

//源文件,测试文件
#include 
using namespace std;
class Integer {
private:
    int val;
public:
    Integer(int i=0) {
        cout<<"Integer(int i)"<val = i;
    }
    //转换函数
    operator int() const {
        cout<<"int()"<val = val;
    }
    int getVal() {
        return val;
    }
};
int main() {
    Integer i;// 触发 Integer(int u)
    i.setVal(100);
    int x = i;//等效书写 int x = (int)i; 触发int()。
    cout<

3 标准转换函数

C++,异常、转换函数、智能指针_第9张图片

智能指针:

只针对堆中对象。 类名 p=new 类名。

1、unique_ptr:

只允许一个指针指向对象,指针不指向堆中对象时,堆中对象被销毁。

C++,异常、转换函数、智能指针_第10张图片

2、shared_ptr

三、智能指针

    C++11中有四种智能指针,auto_ptrshared-ptrunique_ptrweak-ptr。其中auto_ptr有和多不足之处,在C++11中已经建议废弃使用。都是在memory头文件中声明的。名称空间为std

1 unique_ptr

当变量销毁或变量的值置NULL后,指向的对象会销毁,该对象还只能一个指针指向它。

该指针的操作

(1) p->访问对象中的成员

(2) p = NULL;

(3) p.reset();//等效于 p = NULL

(4) p.reset(new Demo); p指向新的堆中的对象, 不再指向之前的内容

示例: unique_ptr

C++,异常、转换函数、智能指针_第11张图片

2 shared_ptr

在给shared_ptr分配内存时建议使用make_shared函数,这样最安全。make_shared会分配一个临时对象,而临时对象又会自动销毁,所以会有两次析构函数的执行。

p1.reset()会使用p1不再指向对象。等效于p1=NULL

p1.reset(new Demo),该指针指向新的对象了。

3 weak_ptr

可以保存一个“弱引用”,引用一个已经用shared_ptr管理的对象。

weak_ptr可通过shared_ptr来初始化

weak_ptr.expired()判断对象是否销毁,如果有返回0,没有返回1

weak_ptr.lock()返回shared_ptr, 如果没有返回NULL

C++,异常、转换函数、智能指针_第12张图片

C++,异常、转换函数、智能指针_第13张图片

你可能感兴趣的:(c++,数据库)