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

标签 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 的情况下复制值?

最佳答案

您缺少星号和间接寻址。

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

关于c++ - 在 C++ 复制构造函数中将值从一个 void** 复制到另一个 void**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414097/

相关文章:

c++ - 如何为可为char或string的模板类实现方法?

c++ - Arduino 立体声音量表

c++ - 如何在 Bazel 构建命令期间传递标志,例如 -DVERBOSE?

c++ - Emacs 和 C++

c++ - 什么时候应该让一个类不可复制?

c++ - 复制控制函数中如何处理 C++ 数组成员?

c++ - 保证复制省略是否适用于函数参数?

c++ - 检查 EnumDisplayDevices dwFlags

C++ 和 ExprTk 解析器 "use of deleted function"错误

c++ - 在类中定义私有(private)结构时,如何将其用作函数参数或返回类型?