我正在尝试做一件简单的事情,但突然卡在两者之间。 在我的代码中,我试图调用一个只传递长度的构造函数,我的第一个构造函数初始化一个 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/