我有一个名为MemoryManager的课程,
它应该实现一个简单的智能指针,(计数参考);
我有一个向量,我存储请求的指针,我返回指向调用者的指针索引..
当用户创建MemoryManager类型的指针时,他调用一个名为modified_malloc(size_t)的初始化函数,创建一个MemoryManager obj,分配一个内存空间并将其存储到数据中,增加计数,并将该对象存储到global_MM_vecotr中,然后返回索引作为指针,当用户尝试使用间接( - >)时,我会根据索引值从向量返回相应的实数指针。
class MemoryManager
{
public:
//operators overloading prototypes
private:
void* data;
int count ;
};
std::vector<MemoryManager*> global_MM_vecotr;
void* MemoryManager::operator=( void* x)
{
// some code here
}
我面临的问题是我重载了几个运算符,但是当我尝试运行下面的代码时,“=”运算符不会被调用。 可以帮我解决问题..
//the main code
{
MemoryManager* obj1 = (MemoryManager*) x->fun1(4); //fun1 returns an index to a MemoryManager obj in a vector;
MemoryManager* obj2 = obj1 ;
}
编辑:已尝试过以下操作,无需更改
{
MemoryManager*obj1 = (MemoryManager*) x->fun1(4); //fun1 returns an index to a Class obj in a vector;
MemoryManager*obj2 ;
*obj2 = *obj1;
}
{
MemoryManager* obj1 = ( MemoryManager*) x-> fun1(4);
MemoryManager* obj2;
obj2.operator =(*obj1);
}
答案 0 :(得分:9)
从您的代码中,您已为operator=
课程MemoryManager
定义了void*
。
您的示例代码正在初始化ClassA
指针,而不是分配给MemoryManager
个实例。
没有调用您的代码有三个原因。
ClassA
而不是MemoryManager
,而您实际上已提供operator=
。答案 1 :(得分:4)
参见规范,你不能覆盖指针的基本操作。
答案 2 :(得分:2)
可能是技术性问题,但您没有分配ClassA
,而是指定ClassA*
(即指针)。我可能会离开这里,但这是我应该承担责任的地方。
答案 3 :(得分:1)
我怀疑你正在使用void指针,以便你可以输入任何类型的对象。我建议使用template代替boost::check library。