温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

自定义C++ Array类以支持自定义内存池

发布时间:2024-07-19 11:34:07 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言
#include <iostream>
#include <cstdlib>

template <typename T>
class Array {
private:
    T* m_data;
    size_t m_size;
    static void* m_memoryPool;
    static size_t m_memoryPoolSize;
    static size_t m_memoryPoolPosition;

public:
    Array(size_t size) : m_size(size) {
        if (m_memoryPool == nullptr) {
            m_memoryPoolSize = size * sizeof(T);
            m_memoryPool = std::malloc(m_memoryPoolSize);
            m_memoryPoolPosition = 0;
        }

        m_data = reinterpret_cast<T*>(static_cast<char*>(m_memoryPool) + m_memoryPoolPosition);
        m_memoryPoolPosition += size * sizeof(T);
    }

    ~Array() {
        // Do not free memory pool in destructor
    }

    T& operator[](size_t index) {
        return m_data[index];
    }

    size_t size() const {
        return m_size;
    }
};

template <typename T>
void* Array<T>::m_memoryPool = nullptr;

template <typename T>
size_t Array<T>::m_memoryPoolSize = 0;

template <typename T>
size_t Array<T>::m_memoryPoolPosition = 0;

int main() {
    Array<int> arr1(5);
    Array<double> arr2(3);

    for (int i = 0; i < arr1.size(); ++i) {
        arr1[i] = i * 10;
    }

    for (int i = 0; i < arr2.size(); ++i) {
        arr2[i] = i * 3.14;
    }

    for (int i = 0; i < arr1.size(); ++i) {
        std::cout << arr1[i] << " ";
    }
    std::cout << std::endl;

    for (int i = 0; i < arr2.size(); ++i) {
        std::cout << arr2[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在这个示例中,我们定义了一个名为Array的模板类,该类支持自定义内存池。类中的静态成员变量m_memoryPool用于存储分配的内存池,m_memoryPoolSize用于存储内存池的大小,m_memoryPoolPosition用于跟踪内存池中下一个可用位置。在类的构造函数中,我们首先检查内存池是否已分配,如果未分配则分配内存池,并将数据存储在内存池的下一个可用位置。在类的析构函数中,我们没有释放内存池,因为内存池是静态的,应该在程序结束时释放。在main函数中,我们创建了两个不同类型的Array对象,并分别对其进行赋值和打印。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI