[C++] 自制编程语言(1):管理变量内存空间(申请任意大小内存并释放)
·
思路
一开始打算用void*,但是运行一看,void*没有指明要释放的内存大小,所以没办法。
于是就用了数组,其实直接用char就行。
模板类Pointer需要一个内存的大小,然后申请连续的内存(char是1字节),最后由于指明了类型,所以会完美释放。
get()接受一个偏移量,从起始位置开始偏移,之后强制类型转换为int,或者其他,最后赋值。
不够完美,但大体思路就这样。
这个设计是为之后的类申请内存所设计的。
代码
#include <iostream>
struct MemoryUnit
{
char data;
~MemoryUnit()
{
std::cout << "~mu " << int(data) << std::endl;
}
};
/*template<typename T>
struct Pointer
{
MemoryUnit* ptr;
T* get()
{
return (T*)ptr;
}
Pointer(T v)
{
ptr = new MemoryUnit[sizeof(T)];
*get() = v;
}
~Pointer()
{
delete[] ptr;
std::cout << "~Pointer" << std::endl;
}
};*/
template<size_t size>
struct Pointer
{
MemoryUnit* ptr;
void* get(size_t offset)
{
char* a = (char*)ptr + offset;
return (void*)a;
}
Pointer()
{
ptr = new MemoryUnit[size];
}
~Pointer()
{
delete[] ptr;
std::cout << "~Pointer" << std::endl;
}
};
int main(int argc, char *argv[])
{
/*Pointer<long> p(666);
std::cout << *p.get() << std::endl;*/
Pointer<8> p;
(*(int*)p.get(0)) = 666;
(*(int*)p.get(4)) = 999;
std::cout << *(int*)p.get(0) << std::endl;
std::cout << *(int*)(p.get(4)) << std::endl;
return 0;
}
更多推荐
所有评论(0)