Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将内容从一个指针复制到另一个指针_C++_Pointers - Fatal编程技术网

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

C++ 将内容从一个指针复制到另一个指针,c++,pointers,C++,Pointers,我有两门课: class Request { KeyValuePair* dimension; }; class Response { KeyValuePair* dimension; }; class KeyValuePair { public: hash_map<string, string> hmap; }; 当然可以: *(res.dimens

我有两门课:

    class Request
    {
      KeyValuePair* dimension;
    };

    class Response
    {
      KeyValuePair* dimension;
    };

    class KeyValuePair
    {
        public:
        hash_map<string, string> hmap;
    };
当然可以:

*(res.dimension) = *(req.dimension);
请注意,如果
KeyValuePair
不是POD类型,则应定义赋值运算符(
operator=
),因为它将在赋值过程中被调用。如果不这样做,将调用编译器生成的一个

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

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

您可以重载
响应
类的
=
操作符来执行
请求.维度
的深度复制,这将使您的
响应.维度
请求.维度
具有相同的值,但与
请求.维度
的任何更改无关


您需要分配新内存。此外,您还需要有复制构造函数(或者在适当的情况下使用默认构造函数)

res.dimension=新的KeyValuePair(要求的维度)


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

您可以实现一个“”指针,以避免不必要的开销。

如何定义
KeyValuePair
?它是否有合适的(复制)构造函数?如果正确定义了复制构造函数,则可以执行
res.dimension=newkeyvaluepair(req.dimension)。这假设存储已分配给
*(res.dimension)
,但情况可能并非如此。什么是豆荚?我已更新以将我的KeyValuePair放入问题中。如果说KeyValuePair不是POD,您能给我看一个定义赋值运算符的教程吗?谢谢@鲁迪简单的旧数据。另外,我相信如果你在谷歌上搜索,你会很容易找到一个教程。这真的不是一个有用的答案。几乎永远都不应该只有一个链接。当然,他必须记住在分配时取消对指针的引用。
if ( res.dimension )
   *(res.dimension) = *(req.dimension);
else
   res.dimension = new KeyValuePair(*(req.dimension));