我没有使用复制构造函数/移动构造函数,我试图将它们包含在我正在编写的稀疏矩阵和向量库中。我认为一切都很好,一切运行良好,运算符重载似乎是成功的等等。然后我继续编写一些基本的迭代方法,并遇到了令人衰弱的内存错误。我相信它与我的构造函数和赋值运算符有关,如下所示:
/* Default constructor. */
CSC_Vector::CSC_Vector()
{
m_length = 0.;
m_values = new double[0];
}
/* Constructor for vector of given input length. Initializes to 0 default. */
/* Input: unsigned int - length */
CSC_Vector::CSC_Vector(const unsigned int & length)
{
m_length = length;
m_values = new double[length]();
}
/* Copy constructor. */
CSC_Vector::CSC_Vector(const CSC_Vector & vec)
{
// Copy vector length and values.
m_length = vec.m_length;
m_values = new double[m_length];
for(int i=0; i<m_length; i++) {
m_values[i] = vec(i);
}
}
/* Move constructor. */
CSC_Vector::CSC_Vector(CSC_Vector && vec)
{
// Move vector length and values to current object.
m_values = vec.m_values;
m_length = vec.m_length;
vec.m_values = nullptr;
vec.m_length = 0;
}
/* Copy assignment operator. */
CSC_Vector& operator=(const CSC_Vector & vec) {
cout << "Copy assign vector." << endl;
delete [] m_values;
m_length = vec.m_length;
m_values = new double[vec.m_length];
for(int i=0; i<m_length; i++) {
m_values[i] = vec(i);
}
return *this;
};
/* Move assignment operator. */
CSC_Vector& operator=(CSC_Vector && vec) {
cout << "Move assign vector." << endl;
delete [] m_values;
m_length = vec.m_length;
m_values = vec.m_values;
vec.m_length = 0;
vec.m_values = nullptr;
return *this;
};
构造函数在类.cpp文件中定义,并在头文件中定义赋值运算符。对于那些有经验的人来说,这是一个非常简单的问题:这段代码中有问题吗?我尝试根据我在互联网上阅读的内容以及Stroustrup在第4版中对其进行的处理来编写这些内容,但在某些地方我做了一些严重的错误。
我间歇性地得到两种错误: