作为一个小型项目,我一直致力于创建一个Ptr
类来复制指针的机制-理论上,用户应该能够像使用真正的指针一样使用这个类,而不会出现问题,也不需要与"实际的";C++指针(除了一些明显的语法变化(。";存储器";是一个非常大的字节数组。然而,我一直被困在分配未引用的指针(例如*p1 = 123;
(上。
从本质上讲,解引用运算符具有T& operator*()
的签名,它通过引用返回T项。问题是说有人试图写类似*p1 = -12367890;
的东西。这意味着,在我的全局内存数组中,无论p1
指向哪个索引,我都需要用-12367890覆盖这些内容,以便内存反映所做的分配。然而,我不知道如何将这个赋值运算符重写为T,以便修改内存。有人能告诉我如何以某种方式重载未引用的赋值运算符,以便修改我的Memory
类吗?
如果有帮助的话,我的类看起来如下(当然是精简到它们的基本部分(:
// constants.h
const int CAPACITY = 4000;
// memory.h
class Memory
{
public:
Memory();
....
private:
byte _memory[CAPACITY];
....
};
// ptr.h
template<typename T>
class Ptr
{
Ptr<T>(){}
T& operator*(); // ISSUE
....
private:
int _index;
};
// serialize.h (global functions for serialization)
template<typename T>
array<byte, sizeof(T)> serialize(const T& object);
template<typename T>
T& deserialize(const array<byte, sizeof(T)>& bytes, T& object);
该程序的驱动程序代码如下所示:
Ptr<int> p1; // initialize pointer
p1._new(); // allocate space in global memory array
*p1 = -12367890; // assign dereferenced pointer
解决了这个问题。
我现在的工作方法是这样的:
T& operator*()
{
return *(T*)_memory.get_index(_index);
}
其中CCD_ 7在全局存储器阵列的索引CCD_。