有人可以向我解释为什么......
DataStructure<MyClass> ds;
cin >> size;
ds = DataStructure<MyClass>(size);
导致我的程序崩溃,但是......
cin >> size;
DataStructure<MyClass> ds = DataStructure<MyClass>(size);
没有?
我认为它与我的程序有关,使用默认构造函数,然后尝试使用隐式复制构造函数,但我不确定。
为了提供更多上下文,我创建了一个哈希表类,在默认构造函数中,我使用nullptr
的数据初始化数组,并在构造函数中使用size
参数初始化我使用new T * [size]
的数据创建数组,并将每个元素设置为nullptr
。
Constructor without any parameters:
this->data = nullptr;
VS
Constructor with size parameter:
this->data= new T * [size];
for(int i = 0; i< size; i++)
{
data[i] = nullptr;
}
答案 0 :(得分:0)
您需要声明一个复制构造函数。如果您没有复制构造函数,则将复制所有成员。在您的情况下,data
将指向第二类中保留的数据。接下来,这些数据将与课程一起销毁并指向任何内容。这很可能会导致程序崩溃。
您的复制构造函数应该执行深层复制,如下所示:
DataStructure(const DataStructure &rhs)
{
if (this->data) delete[] data;
this->data = new T*[rhs.GetSize()];
for (int i=0; i<rhs.GetSize(); i++)
{
this->data[i] = rhs.data[i];
}
return *this;
}