C++灵巧指针

原创 2014年03月11日 15:42:47
template<class Type>
class SmartPtrToConst
{
	//这个类作为基类而存在,为了实现从const smart pointer 到smart pointer的转换
	....
protected:
	union
	{
		const Type* constPointer;
		Type* pointer;
	};

};


template<class Type>
class SmartPtr:public SmartPtrToConst//继承自基类,原理:const类型的指针可以做的,Non-const类型一样可以做,而且可以做得更多
{
public:
	SmartPtr(Type* realPtr = 0):pointer(realPtr){}
	//拷贝构造函数,传递控制权
	SmartPtr(SmartPtr& rhs)
	{
		pointer = ths.pointer;
		ths.pointer = 0;
	}

	~SmartPtr(){delete	pointer;}
	//赋值操作符
	//参数不为const引用,是修改实参本身,传递控制权
	SmartPtr& operator=(SmartPtr& rhs);
	{
		if(*this == SmartPtr)
			return *this;
		//清除当前对象
		delete pointer;
		pointer = rhs.pointer;
		//传递控制权限
		rhs.pointer = 0;
		return *this;
	}

	Type* operator->() const
	{
		return pointer
	}

	Type& operator*() const
	{
		return *pointer;
	}

	//完成判断灵巧指针与控制比较
	//该实现可能存在问题,不确定
	//if(!smartObject1 == !smartObject2)
	bool operator!() const
	{
		if(pointer==null)	
			return true;
		return false;
	}

	//将灵巧指针转换为dump指针,一般禁止这样做,避免不必要的麻烦,隐式类型转换
	//在需要dump指针的函数里面,传递灵巧指针,不能编译通过
	//operator Type*()
	//{
	//	return pointer;
	//}


	//模板成员函数
	//实现灵巧指针派生类到基类的类型转换
	//例:SmartPtr<SubClass> -->SmartPtr<BaseClass>
	template<class newType>
	operator SmartPtr<newType>()
	{
		//词条语句编译可以通过,dump指针可以进行基类与派生类的转换
		//smart指针同样可以进行传递
		return SmartPtr<newType>(pointer);
	}
private:
	//Type* pointer;//如果const类型的smart pointer类存在,就不需要
};

C++灵巧计数器技术

阅读《large_scale_cpp_software_design》一书中灵巧计数器技术。该技术主要是针对非局部静态对象的静态对象成员的初始化。我们知道,非局部静态变量(即全局)是在程序启动前初始化...
  • lizhen_14
  • lizhen_14
  • 2016年01月08日 15:31
  • 643

c/c++中指针的理解(初学者)

关于指针,大家肯定不陌生,一些初学者,想必会出现思绪混乱的情况,现在我就来帮大家缕一缕吧。(第一次写微博 有点小紧张) 大家应该了解一些计算机对内存的管理方式吧。操作系统会将内存单元进行编号,这些...
  • Allen_ww
  • Allen_ww
  • 2016年01月11日 19:41
  • 8694

C/C++指针的指针(**p)和指针的引用(*&)使用案例分析

C/C++指针的指针(**p)和指针的引用(*&)使用案例分析 一个简单的映射描述: int **pp = 5; [pp=0x***]---->[*pp=0x****]---->[**p = 5] t...
  • hzhxxx
  • hzhxxx
  • 2014年06月06日 13:15
  • 16947

深度长文教你彻底掌握C++/C指针

一.基础C++或者C里面最容易让人糊涂应该是指针了,不管是初学者甚至是有经验的童鞋有时候在用指针的时候也会出现一些很隐蔽的错误. 指针本身就是一个很绕的概念,而指针又能够和很多的结构比如数组(二维数...
  • xierhacker
  • xierhacker
  • 2016年09月13日 19:49
  • 6483

C++指针与地址详解 _0

指针的概念 ◆ 1、“存储器”的概念 文件柜–>文件柜上的抽屉–>抽屉上的编号 对应于: 存储器—–>存储单元—–>存储单元的地址 ◆ 2、存储器的使用 1)定义变量时,系统为变量分配相应...
  • wodeai1235
  • wodeai1235
  • 2017年02月07日 20:53
  • 846

C++中指针初始化和使用注意事项

在C++中指针经常会出错,有时候定义了指针没有初始化直接使用,或者是定义指针的时候,将指针置成NULL,但是后面直接对指针进行操作,这样程序也会出错。对于任何指针定义之后,都要对齐进行初始化。 初始化...
  • u012273127
  • u012273127
  • 2016年09月01日 15:12
  • 4166

在C++中是否应该使用指针,何时使用指针

http://bbs.csdn.net/topics/340133178 C++中,除了多态情形外,最好避免指针(个人建议),下面是各种情形的替代方式,简单又高效: 1、指针作为函数形...
  • const_main
  • const_main
  • 2014年10月01日 07:26
  • 1216

【C++进阶】C++中的空指针和野指针

空指针常量,空指针,空指针赋值区以及野指针及其形成原因
  • fu_zk
  • fu_zk
  • 2014年03月12日 23:43
  • 13064

C++的零指针(NULL,0,nullptr)

原文地址:http://www.cppblog.com/airtrack/archive/2012/09/16/190828.aspx零指针的定义C语言:NULL C++03前:0 C++11:n...
  • gogdizzy
  • gogdizzy
  • 2015年10月02日 13:34
  • 1746

C++指针释放问题

今天看到了一个问题,其实在项目中也经常遇到指针释放的问题,先看看一个简单的指针释放的问题: **************************************问题如下: (1)一般在c++...
  • u011473714
  • u011473714
  • 2016年03月02日 22:46
  • 2666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++灵巧指针
举报原因:
原因补充:

(最多只允许输入30个字)