一步一步 实现智能指针(一)
来源:互联网 发布:三菱触摸屏软件 编辑:程序博客网 时间:2024/06/01 21:37
一。.为什么需要智能指针
C++的指针使用容易出错。
比如:new,之后忘了delete。
一个类中如果包含了指针成员。在对象使用时容易造成悬挂指针的错误。
class TestPtr
{
public
:
TestPtr(
int
*p):ptr(p){}
~TestPtr(){delete ptr;}
private
:
int
*ptr;
};
int main ()
{
TestPtr test2 =test1; //(拷贝)
TestPtr test3;
test3 = test1; //赋值
}
在这种情况下,类TestPtr对象的任何拷贝、赋值操作都会使多个TestPtr对象共享相同的指针。但在一个对象发生析构时,指针指向的对象将被释放,从而可能引起悬垂指针。
二、分析过程
按照软件开发的基本原则,分层,封装。
因为c++ 语法上的指针 容易出错,所以就将其封装。
解决三个问题,
1.new,delete 成对
2.不提前释放delete。
3.外在表现指针的行为。
4.其他比如线程安全等等高级问题。不在此讨论。
三.实现 需要用的 技术原理
问题1.
这主要是利用栈对象的有限作用域以及临时对象(有限作用域实现)析构函数释放内存
问题2
使用一个变量标示。
每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,构造函数减少引用计数(如果引用计数减至0,则删除基础对象)
问题3
操作符重载
所有的智能指针都会重载 -> 和 * 操作符
0 0
- 一步一步 实现智能指针(一)
- 一步一步 实现智能指针(二)
- 一步一步 实现智能指针(三)
- 智能指针(一)
- 编写智能指针实现对象托管(一)
- 87 智能指针(一)
- 浅析智能指针(一)
- Boost 智能指针(一)
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- C++智能指针(一)智能指针的简单介绍
- Smart Pointers 智能指针(一)
- 智能指针总结及应用(一)
- C++之智能指针 (一 )
- 笔记十一:智能指针(一)
- 开发日记(4)如何将Bitmap转换成Uri?
- 物流运交管理系统 配送领域属性维护
- UVA10034 - Freckles(最小生成树)
- What's the difference between CUDA shared and global memory?
- JVM的内存区域划分
- 一步一步 实现智能指针(一)
- 习题3-46
- hadoop2.2.0 pom.xml
- 深入理解Java内存模型(一)——基础
- C++语言基础 例程 应用系统开发:银行储蓄系统
- JAVA基础之RandomAccessFile总结
- C++语言基础 例程 异常处理的任务
- C++语言基础 例程 命名空间要解决的问题
- C++语言基础 例程 命名空间的使用