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