C++ 类的复制构造函数

标签 c++ class vector copy-constructor

我的复制构造函数遇到不稳定的问题。

我有一个 MyData 类,如下所示:

class MyData
{
    private:
    std::vector<double> wavelength;
    std::vector<double> amplitude;

    public:
    MyData::MyData(void) {}

    MyData::MyData(const MyData &cSource)
      : wavelength(cSource.wavelength), amplitude(cSource.amplitude)
    {}
}

在我的主程序中,我将 MyData 对象插入到环形缓冲区中。这就是我在 main 中读它的方式:

MyData data;
data = removeq(&q);

问题是有时复制的数据会丢失某些值。等等,如果波长的原始大小是1,复制的数据显示0。我已经调试了我的程序,环形缓冲区中的数据是正确的,等等它显示了正确的大小1。

有人知道我的复制构造函数是否错误或者我是否需要赋值运算符重载?

谢谢!

我用于插入/删除环形缓冲区的代码:

void insertq(struct queue *p, MyData v)
{
    int t;
    t = (p->rear+1)%MAX;
    if(t == p->front)
    {   }
    else
    {
            p->rear = t;        
            p->arr[p->rear] = v;
    }
}
MyData removeq(struct queue *p)
{
    MyData empty;   

    if(isempty(p))
    {               
        return empty;
    }
    else
    {       
        p->front = (p->front + 1)%MAX;
        empty = p->arr[p->front];
        return empty;
    }
 }

最佳答案

为了调用复制构造函数,您必须在同一行中声明并初始化您的对象(使用另一个对象)。您当前的代码实际上调用了重载的 = 运算符。

关于C++ 类的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459412/

相关文章:

c++ - 返回值时调用析构函数

python - 如何使用静态变量、自定义 getter 和 setter 扩展 SWIG 中的结构?

c++ - 关于类成员函数指针的sizeof

css - 处理 :before and :after sudo classes 时嵌套的 LESS 语句

list - 在 Clojure 中,什么时候应该在列表上使用向量,反之亦然?

c++ - MFC float 工具栏始终处于事件状态

c# - 将C#文件包装到DLL中

C++:如何调用属于同一类的成员函数指针?

c++ - 安全地将(shared_ptr 的 vector 到对象)转换为(shared_ptr 的 vector 到常量对象)

c++ - vector 迭代器错误