将内容从一个指针复制到另一个指针

时间:2012-03-01 09:40:55

标签: c++ pointers

我有2个课程:

    class Request
    {
      KeyValuePair* dimension;
    };

    class Response
    {
      KeyValuePair* dimension;
    };

    class KeyValuePair
    {
        public:
        hash_map<string, string> hmap;
    };

在其中一种方法中,我想用Response.dimension填充Request.dimension,但我希望Request.dimension指向与Response.dimension不同的地址?

我不希望任何更改Response.dimension也会影响Request.dimension

有办法吗?

void Transformation::applyTransformations(const Request& req, Response& res)
{
   res.dimension = req.dimension; // WRONG. Pointing the same address.
}

5 个答案:

答案 0 :(得分:2)

是的,当然:

*(res.dimension) = *(req.dimension);

请注意,如果KeyValuePair不是POD类型,则应定义赋值运算符(operator =),因为它将在赋值期间调用。如果不这样做,将调用编译器生成的。

您还应检查res.dimension是否已正确分配,如果没有,请使用复制构造函数:

if ( res.dimension )
   *(res.dimension) = *(req.dimension);
else
   res.dimension = new KeyValuePair(*(req.dimension));

答案 1 :(得分:1)

您可以重载=班级的Response运算符以执行request.dimension的深层副本,这会使您的Response.dimension具有与Request.dimension相同的值{1}}但它将独立于对Request.dimension的任何更改。

答案 2 :(得分:0)

答案 3 :(得分:0)

您需要分配新内存。您还需要具有复制构造函数(或者在适当时使用默认构造函数)。

res.dimension = new KeyValuePair(req.dimension);

此外,您还必须处理内存,即定义复制构造函数,复制运算符,空构造函数和析构函数。

答案 4 :(得分:0)

您可以实现'copy on write'指针,以避免不必要的开销。