创建对象的副本

时间:2016-04-16 13:06:26

标签: c++ arrays c++11 copy-constructor

我想创建一个当前对象的副本并将其存储在一个数组中,稍后我可以访问它。

我有一个班级

false

我在class Purpose{ public: Purpose(){ max = 5; elements = 0; obj_elements = 0; arr = new int[max]; } Purpose( const Purpose &a){ max = a.max; elements = a.elements; obj_elements = a.obj_elements; arr = new int[elements] for( int i = 0; i < elements; i++ ){ arr[i] = a.arr[i] } } Add(){ Purpose *tmp = new Purpose(*this); arr_two[ obj_elements++ ] = tmp; } private: int max; int elements; int obj_elements; int *arr; Purpose *arr_two[2]; } 数组中添加了一个int。 Add()方法创建当前对象的副本并将其存储在arr数组中,但是当我想打印复制对象的元素时,它会抛出seg错误。

arr_two

arr元素的打印引发了段错误。其他属性打印没有问题。

打印数组值时程序崩溃/ seg故障的原因是什么?当我在void Purpose::Print_It(){ cout << arr_two[ obj_elements - 1 ] -> max << endl; cout << arr_two[ obj_elements - 1 ] -> elements << endl; cout << arr_two[ obj_elements - 1 ] -> obj_elements << endl; for( int i = 0; i < arr_two[ obj_elements - 1 ] -> elements ; i++){ cout << arr_two[ obj_elements - 1 ] -> arr[i] << endl } } 方法中打印数组的值时,它可以工作。

1 个答案:

答案 0 :(得分:1)

调用大小为0的new []运算符(元素初始化为0)?

关于size_t参数,来自new []运算符的cplusplus website

  

如果此参数为零,则该函数在成功时仍会返回一个明确的非空指针(尽管取消引用此指针会导致未定义的行为)。