智能指针和万能指针
2017-09-05 09:12
232 查看
智能指针:
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自动删除指向的对象外,他们的工作机制很像C++的内置指针。智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。
智能指针的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象,当增加一个可以访问该资源的引用时计数器加1,减少时计数器减1,当计数器的值减少到0时,就会自动释放该资源。
万能指针:
即void指针,因为void型指针可以保存任何类型的指针,void指针赋值给其他类型的指针时都要进行转换,void指针不能参与指针运算,除非进行转换。可以用作函数的返回值,比如malloc函数的返回值就是void*,亦可以用作函数的参数,比如memcpy的参数,这也是它和strcpy不同的地方。
另外,为什么void可以用来修饰指针而不能用来修饰其他的变量呢?因为所谓数据类型实际上是固定内存块大小的别名,比如说int是4个字节,double是8个字节,那么它们修饰变量的时候,内存知道给他们分配多少的内存,但是void修饰别的变量的时候就不知道了,所以会出错,而对于指针来说,在32位下是4个字节,在64位下是8个字节,不受数据类型影响,所以可以用void修饰。
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自动删除指向的对象外,他们的工作机制很像C++的内置指针。智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。
智能指针的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象,当增加一个可以访问该资源的引用时计数器加1,减少时计数器减1,当计数器的值减少到0时,就会自动释放该资源。
万能指针:
即void指针,因为void型指针可以保存任何类型的指针,void指针赋值给其他类型的指针时都要进行转换,void指针不能参与指针运算,除非进行转换。可以用作函数的返回值,比如malloc函数的返回值就是void*,亦可以用作函数的参数,比如memcpy的参数,这也是它和strcpy不同的地方。
另外,为什么void可以用来修饰指针而不能用来修饰其他的变量呢?因为所谓数据类型实际上是固定内存块大小的别名,比如说int是4个字节,double是8个字节,那么它们修饰变量的时候,内存知道给他们分配多少的内存,但是void修饰别的变量的时候就不知道了,所以会出错,而对于指针来说,在32位下是4个字节,在64位下是8个字节,不受数据类型影响,所以可以用void修饰。
相关文章推荐
- STL auto_ptr智能指针简单分析
- 智能指针之 shared_ptr
- WebKit源代码里的RefPtr智能指针
- 【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert
- C++中智能指针的设计和使用
- C++深度探索系列:智能指针(Smart Pointer) [一]
- C++深度探索系列:智能指针(Smart Pointer) /1
- c++ 智能指针—— c++复习(八)
- [C/C++标准库]_[初级]_[使用auto_ptr智能指针]
- C++ 智能指针Auto_PTR 分析http://www.cnblogs.com/skyofbitbit/p/3649776.html
- 不改原始类结构,不改变原始函数调用,加上有引用计数的智能指针
- 指针(1)智能指针(re迭代)
- 智能指针的死穴 -- 循环引用
- 关于boost和loki的智能指针
- 为什么auto_ptr智能指针不能作为STL标准容器的元素
- 关于智能指针auto_ptr
- 智能指针 同一个
- C++中智能指针的设计和使用
- WebKit中智能指针
- 智能指针初步实现