gpt4 book ai didi

c++ - 重载 "="使 obj2 = obj1 时不调用相等性

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:40 24 4
gpt4 key购买 nike

我有一个名为 MemoryManager 的类,

它应该实现一个简单的智能指针,(计数引用);
我有一个 vector ,我在其中存储请求的指针,并将指针的索引返回给调用者..

当用户创建一个 MemoryManager 类型的指针时,他调用一个名为 modified_malloc(size_t) 的初始化函数,创建一个 MemoryManager 对象,分配内存空间并将其存储到数据中,增加计数,并将对象存储到 global_MM_vecotr 中,然后返回索引作为指针,当使用尝试使用间接(->)时,我根据索引值从 vector 中返回适当的实际指针..

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);
}

最佳答案

从您的代码中,您已经为采用 void*MemoryManager 类定义了 operator=

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

您的代码未被调用的原因有以下三个。

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

关于c++ - 重载 "="使 obj2 = obj1 时不调用相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1259056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com