模板(范型)的安全数组C++代码

简介: 模板(范型)的安全数组C++代码

其实吾不喜欢使用范型,因为这个特性很少用到.


 有的时候,确实带来无比方便.比如说这里要实现起来,一下子就包括了所有类型.


 之后还要改进的问题:


对于memset/memcpy之类的直接操作,如何处理?

重载+/-/++/--等操作符.还要计算移动.

对于多维情况,如何处理?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
template <class TYPE>
class SafeArray
{
public:
    SafeArray(const int size) 
    {
       nSize = size;
       //new/delete
       pData = (TYPE*)malloc(sizeof(TYPE)*nSize);
       //memset(pData, 0, sizeof(int)*nSize);
       for (int i=0; i<nSize; i++)
       {
            pData[i] = i;
       }
    }
    ~SafeArray()
    {
        if (pData != NULL)
        {
            free(pData);
            pData = NULL;
        }
    }
    TYPE& operator[](int i)
    {
        if( i >= nSize )
        {
            cout << "索引超过最大值" <<endl; 
            // 返回第一个元素
            return pData[0];
        }
        return pData[i];
    }
private:
    TYPE*   pData;
    int  nSize;
};
/**
C++中声明办法:
template <class TYPE>
TYPE& SafeArray<TYPE>::operator[](int i)
{
    if( i > nSize )
    {
        GH_LOG_ERROR("out of array range! %d -> %d", nSize, i);
        // 返回第一个元素
        return pData[0];
    }
    return pData[i];
}
*/
int main()
{
   int array_size = 8;
   SafeArray<int> test(array_size);
   cout << "test[2] 的值为 : " << test[2] <<endl;
   cout << "test[5] 的值为 : " << test[5] <<endl;
   //应该报错了
   cout << "test[9] 的值为 : " << test[array_size+1] <<endl;
   return 0;
}
目录
相关文章
|
1月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
91 10
|
4天前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
14 4
|
28天前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
14 1
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
187 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
38 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
76 2
|
1月前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
38 2
|
1月前
|
编译器 C++
【C++】模板进阶:深入解析模板特化
【C++】模板进阶:深入解析模板特化
|
4天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
22 4
|
6天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
19 4