在C ++拷贝构造函数中将值从一个void **复制到另一个void **

时间:2017-01-01 07:49:45

标签: c++ copy-constructor

我需要在复制构造函数中复制值。但我的复制构造函数不起作用

typedef void* Vptr;

class Vector
{
  int sz;
  Vptr* elemsArray;
public:
  Vector(const Vector& src) : sz{src.sz}, elemsArray{new Vptr[src.sz]} 
  {
    Vptr lp,rp;
    for (int i = 0; i < this->sz; i++) {
       lp = this->elemsArray[i];
       rp = src.elemsArray[i];
       *lp=*rp; // compiler doesn't like this line!!!
    }
  }
};

如何在不使用std::copy的情况下复制值?

1 个答案:

答案 0 :(得分:1)

您缺少星号和间接。

Vector(const Vector& src) : sz{src.sz}, elemsArray{new Vptr[src.sz]} 
{
  Vptr *lp, *rp;
  for (int i = 0; i < this->sz; i++) {
     lp = &(this->elemsArray[i]);
     rp = &(src.elemsArray[i]);
     *lp=*rp; 
  }
}

当然编译器抱怨说,你试图复制void。没有类型信息可以使副本成为可能。

我也无法理解为什么lprp的所有“聪明”。只需直接复制:

Vector(const Vector& src) : sz{src.sz}, elemsArray{new Vptr[src.sz]} 
{
  for (int i = 0; i < this->sz; i++) {
     this->elemsArray[i] = src.elemsArray[i];
  }
}