C++类模板初始化的问题

Problems with C++ Class Template Initialization

本文关键字:问题 初始化 C++      更新时间:2023-10-16

有人可以向我解释为什么...

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;

与。

Constructor with size parameter:
this->data= new T * [size];
for(int i = 0; i< size; i++)
{
    data[i] = nullptr;
}

您需要声明一个复制构造函数。如果您没有复制构造函数,则将复制所有成员。在您的情况下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;
}