C++ 句柄类的原理以及设计

句柄类存在的意义是为了弥补将派生类对象赋给基类对象时发生的切片效应。例如下面的程序:
multimap<Base> basket;
Base base;
Derived derive;
basket.insert(base);	//ok,add copy of base;
basket.insert(derive);	//ok,but derive sliced down to its base part.

也就是说在把派生类的对象赋值给基类的时候,会发生切片效益,派生类的非基类部分会被切掉,那么就失去了本身的意义。为了解决这个问题我们可以
使用基于基类的指针或者引用,但是设计到指针问题的话就涉及到资源不使用后的释放问题。这就引出了句柄类,它类似智能指针,可以在我们复制资源
的时候不用去担心内存泄露的问题。整个程序的设计如下所示:
//Base.h
#pragma once
class Base
{
public:
	Base(void);
	virtual ~Base(void);
	virtual Base* clone() const;
	virtual void fine() const;
private:
	int mb;
};

//Base.cpp
#include "Base.h"
#include <iostream>
using namespace std;


Base::Base(void):mb(12)
{
}


Base::~Base(void)
{
}


Base* Base::clone() const
{
	return new Base(*this);
}


void Base::fine() const
{
	cout<<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值