如何重载取消引用"user-built pointer class"的分配?



作为一个小型项目,我一直致力于创建一个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
多亏了@super,

解决了这个问题。

我现在的工作方法是这样的:

T& operator*()
{
return *(T*)_memory.get_index(_index);
}

其中CCD_ 7在全局存储器阵列的索引CCD_。

相关内容

  • 没有找到相关文章

最新更新