《linux多线程服务端编程》---- C++基础前奏

本文详细介绍了C++编程中`mutable`关键字的用法,强调其在const成员函数中使数据成员可变的功能。接着讨论了C++的二阶构造模式,并深入探讨了野指针和空悬指针的概念及避免策略。文章还涵盖了观察者模式、值语义、自旋锁的工作原理及其潜在问题,以及写时复制(COW)机制。此外,还讲解了`Explicit`关键字的作用和读写锁、RCU机制以及POD数据类型的特性。
摘要由CSDN通过智能技术生成

1 mutable

在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

该关键字修饰类中数据成员时,会释放掉non-static成员变量的bitwise constnes约束,即使在const成员函数依然可以修改该数据成员变量。

Immutable object (不可变对象) :当对象被创建后,你不能修改对象的状态以及字段。

2 C++二阶构造

【C++深度剖析教程4】C++的二阶构造模式_厚积薄发-CSDN博客

3 野指针和空悬指针

野指针:

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。

成因:

(1)指针变量未初始化

任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

(2)指针释放后之后未置空

有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。

(3)指针操作超越变量作用域

不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。

空指针:

 #define NULL    ((void *)0) 

在内存分配方面,较小的地址是不用来存放数据的,也不允许程序访问的。所以,指针指向了它,就是这个指针不能操作它指向的这块较小的地址。

简单来说,空指针有指向,但是它指向的地址是特殊的,该地址不允许存放数据和不允许程序访问,所以空指针不能操作该地址里的东西,我们就理解为“指针指向了空,无法操作了”。

void * 类型指针,

这个类型指针指向了实实在在的存放数据的地址,但是该地址存放的数据的数据类型我们暂时不知道。

空悬指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值