在制作obj2 = obj1时,不会调用重载的“=”相等

时间:2009-08-11 08:26:16

标签: c++ operator-overloading

我有一个名为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);
}

4 个答案:

答案 0 :(得分:9)

从您的代码中,您已为operator=课程MemoryManager定义了void*

您的示例代码正在初始化ClassA 指针,而不是分配给MemoryManager个实例。

没有调用您的代码有三个原因。

  • 您正在初始化未分配,因此如果有任何构造函数将被调用而不是赋值运算符。
  • 您正在初始化指针而不是对象,指针是基本类型,您无法为它们提供重载运算符。
  • 您使用的是ClassA而不是MemoryManager,而您实际上已提供operator=

答案 1 :(得分:4)

参见规范,你不能覆盖指针的基本操作。

答案 2 :(得分:2)

可能是技术性问题,但您没有分配ClassA,而是指定ClassA*(即指针)。我可能会离开这里,但这是我应该承担责任的地方。

答案 3 :(得分:1)

我怀疑你正在使用void指针,以便你可以输入任何类型的对象。我建议使用template代替boost::check library