2009-08-11 43 views
0

我有这个类中调用的MemoryManager,重载“=”使obj2的时候= OBJ1

它应该实现一个简单的智能指针,(算上参考)平等不会被调用;
我有一个矢量,其中i存储所请求的指针,以及i指针的索引返回给调用者..

当用户创建的MemoryManager类型的指针他调用名为modified_malloc(为size_t)的初始化功能

,创建一个MemoryManager obj,分配一个内存空间并将其存储到数据中,增加count,并将该对象存储到global_MM_vecotr中,并将该索引作为指针返回,当use尝试使用间接寻址( - >)时,返回相应的实数指针从矢量,根据索引值..

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 
} 

我正在面临的问题是,我重载几个运营商的,然而,当我尝试运行下面的“=”操作符不会被调用的代码.. 可以some1点问题拿出来给我..

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

回答

9

从你的代码,你已经定义operator=MemoryManager类取void*

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

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

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

我很喜欢misunderstading .. classA是一样的memorymanager ..我正在重新命名我的“胡言乱语”的名字变成更ig的名称的过程..当我张贴的质量.. – 2009-08-11 08:50:24

+0

公平的,那么你只需要解决其他两点。 – 2009-08-11 08:53:20

+0

我编辑了代码..并省略了ClassA的使用:),我将相等移动到创建对象后。 你可以检查编辑后的描述并告诉我我可以做些什么来避免使用指针:S – 2009-08-11 08:58:50

4

请参阅规范,您不能重写指针基本操作。

+0

你应该把这个答案提高一点,这是正确的,但很难理解。 – 2009-08-11 09:27:59

+0

@Konrad - 我想引用Stroustrup,但不幸的是只有俄文版本。 – Dewfy 2009-08-11 09:35:36

2

可能是一个技术性问题,但您并未分配ClassA,您正在分配一个ClassA*(即指针)。我可能会离开这里,但这是我责备的地方。

1

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

+0

oddfellow::) thx很多..已经作出这个决定 – 2009-08-11 09:49:31