您好,登錄后才能下訂單哦!
#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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。