c++ - 创建对象的拷贝

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

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

我有课

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

我在 arr 数组中添加整数。 Add() 方法创建当前对象的拷贝并将其存储在 arr_two 数组中,但是当我想打印复制对象的元素时,它会抛出段错误。

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

        }

    }

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

是什么导致程序在打印数组值时崩溃/段错误?当我在 Add() 方法中打印数组的值时,它起作用了。

最佳答案

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

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

If this argument is zero, the function still returns a distinct non-null pointer on success (although dereferencing this pointer leads to undefined behavior).

关于c++ - 创建对象的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664556/

相关文章:

c++ - 为什么范围解析运算符在类外给出错误?

c - 在 char 数组指针内赋值

python - 如何从多个相同长度的列表中获取 numpy 数组并沿轴排序?

python - 我需要用一个链表实现实现一个稀疏数组

c++ - 制作/测试 : Check if code compiles

java - 多线程异常和锁

c++ - 在 C++ 中获取文件描述符的问题

c++ - 将 vs 2010 解决方案更新为 2012.std::function = NULL 错误

C++:具有任意数量初始化参数的模板类/函数

c++ - 何时使用 `std::hypot(x,y)` 而不是 `std::sqrt(x*x + y*y)`