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

Mad*_* D. 0 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
 }
Run Code Online (Sandbox Code Playgroud)

我面临的问题是我重载了几个运算符,但是当我尝试运行下面的代码时,"="运算符没有被调用..可以将问题指向我...

  //the main code 
 {

MemoryManager* obj1 = (MemoryManager*) x->fun1(4); //fun1 returns an index to a MemoryManager obj in a vector;
MemoryManager* obj2 =  obj1 ;
   }
Run Code Online (Sandbox Code Playgroud)

编辑:已经尝试了以下,没有变化

  {  
        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);
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 9

从您的代码中,您已operator=MemoryManager该类定义了一个void*.

您的示例代码是初始化ClassA 指针而不是分配给MemoryManager实例.

您的代码未被调用的原因有三个.

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

  • 您正在使用大量指针,如果您不想使用它们,请停止使用它们!也许您应该发布"MemoryManager"的完整定义并解释它想要实现的目标?有了大量指针和演员阵容的小片段,你不容易看到你想要做什么. (2认同)