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

时间:2014-03-04 23:53:12

标签: c++ oop templates object

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

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;
}

1 个答案:

答案 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;
}