C++的一个简单的句柄类模板

#ifndef HANDLE_H
#define HANDLE_H
#include "Animal.h"

template <typename T>
class Handle{
    public:
        Handle(T *ptr);
        Handle(const Handle &other);
        Handle &operator = (const Handle &other);
        ~Handle();
        T *operator->();
    private:
        T *ptr_;
};

template <typename T>
inline Handle<T>::Handle(T *ptr)
    :ptr_(ptr->copy())
{}

template <typename T>
inline Handle<T>::Handle(const Handle &other)
    :ptr_(other.ptr_->copy())
{}

template <typename T>
inline Handle<T> &Handle<T>::operator = (const Handle &other)
{
    if(this != &other){
        delete ptr_;
        ptr_ = other.ptr_->copy();
    }
    return *this;
}

template <typename T>
inline Handle<T>::~Handle()
{
    delete ptr_;
}

template <typename T>
inline T *Handle<T>::operator -> ()
{
    return ptr_;
}
#endif  /*HANDLE_H*/

时间: 2024-10-27 10:35:08

C++的一个简单的句柄类模板的相关文章

C++一个简单的手柄类模板

#ifndef HANDLE_H #define HANDLE_H #include "Animal.h" template <typename T> class Handle{ public: Handle(T *ptr); Handle(const Handle &other); Handle &operator = (const Handle &other); ~Handle(); T *operator->(); private: T

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

STL库中简单的list类模板示例和一个小的延时程序

先贴代码: #include "stdafx.h" #include <iostream> #include <list> #include <ctime> using namespace std; void mysleep(int second) { clock_t st; st=clock();//该程序从启动到函数调用占用CPU的时间 while(clock()-st<second*CLOCKS_PER_SEC);//#define CL

一个简单的购物类网站

最近给学校做了一个购物类的网站:捐赠网站;模式和淘宝是一样的:选择商品->选择数量->填写留言(评价)->付款(支付宝付款);逻辑比较简单. 接下来的几天,我将就编程中遇到的一些问题和体会说说.下面列出了想说的几点; 1.html 文档对象模型 DOM: 2.安全验证方面:比如客户端向服务器传输数据时怎么保证数据的安全性;

一个简单的Log类

经常在运行程序时需要在某些地方记录log,之前想用Log4Net,但又感觉要附带一个dll,想要只带一个exe文件运行,干脆自己写个简单的类了. 需要满足的条件:被多个线程调用:时间的准确性不重要,知道先后关系就行:不想阻塞线程,毕竟干活才是主要目的,为了不太在意时间的log而阻塞等待有点不划算. 然后开始:1.需要静态类,默认存储在当前目录下,可指定log文件名:2.需要一个用来写入到文件的方法. public static class LogWriter { static string lo

一个简单的 JavaScript 的模板引擎

比较简单,直接贴代码吧: (function (global) { var _version = '1.0.0', _setting = { openTag: '<#', /*逻辑代码的开始标签*/ closeTag: '#>', /*逻辑代码的结束标签*/ maskOpenTag: '<!-', /*注释的开始标签*/ maskCloseTag: '-!>' /*注释的结束标签*/ }, _templateCache = {}, _escapeHTML = function (s

一个简单的数组类操作

要求定义一个数组类,动态分配数组大小,并实现反转与排序操作. 代码如下: class Array { private int a[] = null; private int foot=0; public Array(int len) { if (len > 0) this.a = new int[len]; else this.a = new int[1]; } public boolean add(int i){ if(this.foot<this.a.length){ this.a[foo

一个简单网络服务器类的实现

网络服务器,顾名思义是一个可以接受连接的host,我们要实现的网络服务器类是一个 1.能够实现多个连接 2.仅仅通过继承或实现网络服务器类(或接口)的处理就能实现不同的连接功能 3.当服务器关闭时,已有建立的私有连接不被中断,但服务器不在接受新的连接 针对以上功能我们分解一下要实现的模块: 1.多线程实现多个连接,当serverSocket accept到一个连接请求时,开启一个独立的线程 2.实现这个,要求上面新建线程能被网络服务器锁管理 3.服务器不接受其他连接,可以用线程中断做,私有连接能

一个简单的c++类的定义和实例化

#include "iostream" #include <string> using namespace std; class mycoach { private: string name; short age = 0; public: void coachgreeting(string _name, int _age) { name = _name; age = _age; cout << "大家好,我是" << name &