【C++ 学习笔记】 异类指针篇
2012-07-25 16:01
288 查看
Void Pointer
(void *)类型 指针是一种特殊的指针,可以用以指向任意的数据类型。但是void*类型指针当然也有它的局限,不能将这个类型的指针指向其他的既定的类型,如char*。
如果要进行转换则需要强制类型转换。如:
Volatile Pointer
volatile 和 const都是类型限定符。volatile关键字可以用来说明一个变量有可能被意想不到的改变。如果一个变量被多次应用那么编译器的优化程序就会将其拷贝到寄存器中进行程序的优化,而当这个变量一直在改变的时候这样的优化很明显是不合理的,于是你便可以使用volatile这个关键词来告诉优化器你能将这个变量拷贝到寄存器进行优化。volatile变量一般可以用于多线程的共享变量、并行设备的寄存器等。
指向volatile变量的指针说明这个指针指向的值可能被意想不到的改变,譬如在多线程中你两次读取这个指针可能得到的值是不一样的。如果你要去volatile的值最好把值一次取出来防止值在运算过程中改变。
指向volatile变量的指针定义:
volatile指针说明这个指针可能被意想不到的改变。定义:
Const Pointer
const 指针是指指针一旦被赋值后不能做修改,应当写成下面的形式:
大家肯定觉得很奇怪为什么const关键字不写在指针类型int*的前面,这样写是另一种指针称为指向const对象的指针,这两种类型很容易混淆。指向const对象的指针指向的对象不可修改而指针本身是可以修改的。这种指针应当吧const写在前面,即写成下面的形式:
auto_ptr
auto_ptr在C++标准库中定义的一种指针,用于处理指针的内存回收问题。auto_ptr会接管赋给他们的指针的所有权(ownship),当该指针失效时(离开其作用域等)atuo_ptr会自动的释放该指针指向的内存。我们可以这样定义一个auto_ptr:
因为需要隐式的析构,所以必须知道指针的类型,为了防止void* 指针赋值给auto_ptr,可以使用explicit关键字:
(void *)类型 指针是一种特殊的指针,可以用以指向任意的数据类型。但是void*类型指针当然也有它的局限,不能将这个类型的指针指向其他的既定的类型,如char*。
如果要进行转换则需要强制类型转换。如:
void* ptr = "HAHAHA"; char* str = (char*) ptr;
Volatile Pointer
volatile 和 const都是类型限定符。volatile关键字可以用来说明一个变量有可能被意想不到的改变。如果一个变量被多次应用那么编译器的优化程序就会将其拷贝到寄存器中进行程序的优化,而当这个变量一直在改变的时候这样的优化很明显是不合理的,于是你便可以使用volatile这个关键词来告诉优化器你能将这个变量拷贝到寄存器进行优化。volatile变量一般可以用于多线程的共享变量、并行设备的寄存器等。
指向volatile变量的指针说明这个指针指向的值可能被意想不到的改变,譬如在多线程中你两次读取这个指针可能得到的值是不一样的。如果你要去volatile的值最好把值一次取出来防止值在运算过程中改变。
指向volatile变量的指针定义:
int val = 0; volatile int* ptr = &val;
volatile指针说明这个指针可能被意想不到的改变。定义:
int val = 0; int* volatile ptr = &val;
Const Pointer
const 指针是指指针一旦被赋值后不能做修改,应当写成下面的形式:
int val = 0; int* const ptr = &val; ptr = 1; //报错!!不可重置指针值
大家肯定觉得很奇怪为什么const关键字不写在指针类型int*的前面,这样写是另一种指针称为指向const对象的指针,这两种类型很容易混淆。指向const对象的指针指向的对象不可修改而指针本身是可以修改的。这种指针应当吧const写在前面,即写成下面的形式:
int val = 0; int* const ptr = &val; *ptr = 0; //报错!!不可重置指针所指对象的值
auto_ptr
auto_ptr在C++标准库中定义的一种指针,用于处理指针的内存回收问题。auto_ptr会接管赋给他们的指针的所有权(ownship),当该指针失效时(离开其作用域等)atuo_ptr会自动的释放该指针指向的内存。我们可以这样定义一个auto_ptr:
int val = 0; int* ptr = &val; auto_ptr<int> aptr(ptr);
因为需要隐式的析构,所以必须知道指针的类型,为了防止void* 指针赋值给auto_ptr,可以使用explicit关键字:
explicit auto_ptr<int> aptr(ptr);
相关文章推荐
- C++学习笔记(四)--指针(2)转
- C++学习笔记(四)--指针(2)
- C++学习笔记30,指针的引用(2)
- C语言学习笔记 (002) - C++中引用和指针的区别(转载)
- C/C++中关于地址、指针和引用变量的学习笔记(四) : 函数
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- c++学习笔记-----函数指针
- C/C++学习笔记-数组和指针
- c++学习笔记(六):数组指针
- C/C++学习笔记:智能指针详解
- 数组、指针和字符串(一)------C++学习笔记
- C++学习笔记九之函数指针
- C++学习笔记(四)--指针(3)
- C++学习笔记(四)——数组和指针
- c++学习笔记--行为像指针的类
- 【C++】学习笔记十一——指针、数组和指针算术
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- 【c++学习笔记】指针
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针