我正在尝试做一件简单的事情,但突然之间陷入困境。在我的代码中,我试图调用一个仅传递长度的构造函数,我的第一个构造函数初始化了一个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
不会将值放入第一个构造函数调用期间分配的内存中。而是,它构造了一个新的 myvector
(使用第二个构造函数)并将其复制到v1中。您在第一个构造函数调用期间执行的操作会丢失。
听起来您想定义一个赋值运算符,而不是一个带int*
参数的构造函数。另外,通常应声明单参数构造函数,explicit
以防止此类事情意外发生。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句