C++类模板初始化的问题
Problems with C++ Class Template Initialization
有人可以向我解释为什么...
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;
}
相关文章:
- C++转换参数初始化问题
- 运行时C++数组初始化问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- C++初始化具有 int 0 问题的unique_ptr
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 在构造函数 c++ 中初始化属性时出现问题
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- shared_ptr类的向量的向量初始化问题
- public:静态常量字符串声明/初始化问题
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 true 初始化布尔数组时出现问题
- 为什么C++中的大括号初始化可以解决STL容器的初始化问题
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- C++中构造函数的对象初始化出现问题
- 初始化com对象的问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 理解向量初始化时出现问题