c++ - 在 C++ 中调用的第二个构造函数(错误输出)

标签 c++ arrays

我正在尝试做一件简单的事情,但突然卡在两者之间。 在我的代码中,我试图调用一个只传递长度的构造函数,我的第一个构造函数初始化一个 size = length 的数组,所有元素都为 0。

然后我将数组传递给构造函数以赋予先前定义的数组其值

这是示例:

class myvector
{
  int *arr;
  int length;

public :
    myvector(int);
    myvector(int *);

};

myvector :: myvector (int len)
{
    arr =  new int [length = len];
    for ( int i=0;i< length;i++)
    {
        arr[i] = 0;
    }

}

myvector :: myvector ( int *ex)
{
    for ( int i=0;i< length;i++)
    {

        cout << ex[i] << " " << length <<" ";
        arr[i] = ex[i];
        cout << arr[i]<< " ";

    }
}

int main()
{

    myvector v1(5);
    int x[5] = {2,3,4,45,6};
    v1 = x;

}

在我的第二个构造函数中,在第一个构造函数中定义的长度丢失了它的值,数组 arr 也丢失了它的值

我做了什么吗? 请详细说明一下

最佳答案

我认为您不太了解调用构造函数的情况。 v1 = x 行没有将值放入在第一次构造函数调用期间分配的内存中。相反,它构造了一个 new myvector(使用第二个构造函数)并将其复制到 v1 中。您在第一次构造函数调用期间所做的事情丢失了。

听起来您想定义一个赋值运算符,而不是一个接受 int* 参数的构造函数。此外,通常您应该将单参数构造函数声明为 explicit 以防止此类事件意外发生。

关于c++ - 在 C++ 中调用的第二个构造函数(错误输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103788/

相关文章:

c++ - 为什么将 '<' 当作 'operator<' 而不是一个标记来包围模板参数呢?

ruby-on-rails - 使用 Ruby on Rails 从另一个 Web 服务获取和解析 JSON

c - 接受二维数组中的多个字符串?

JavaScript:调用外部函数时调用 Array.reduce,并且外部函数有参数

c++ - SFML- sleep 计算

c++ - 如何在 boost 日期时间中创建日期范围?

javascript - React Native类型错误: this. props.data.map不是函数

jquery - 使用 jQuery Each 从数组创建多个列表

C++变量数组作为类成员

c++ - C++ 的另一个 typedef 错误