其他分享
首页 > 其他分享> > c – 使用std :: unique_ptr的双(二维)数组

c – 使用std :: unique_ptr的双(二维)数组

作者:互联网

我有一个指针分配给指针的双数组.

  // pointer to pointer
  int **x = new int *[5];   // allocation
  for (i=0; i<5; i++){
      x[i] = new int[2];
  }

  for (i=0; i<5; i++){      // assignment
      for (j=0; j<2; j++){
          x[i][j] = i+j;
      }
  }

  for (i=0; i<5; i++)   // deallocation
      delete x[i];
  delete x;

我试图使用unique_ptr这样做:

std::unique_ptr<std::unique_ptr<int>[]> a(new std::unique_ptr<int>[5]);
  for (i=0; i<5; i++)
      a[i] = new int[2];

但不断收到错误,说没有operator =匹配这些操作数.我在这做错了什么?

解决方法:

您不能将int *分配给std :: unique_ptr< int []>,这是导致错误的原因.正确的代码是

      a[i] = std::unique_ptr<int[]>(new int[2]);

但是,piokuc是正确的,对于数组使用unique_ptr是非常不寻常的,因为这是std :: vector和std :: array的用途,具体取决于是否提前知道大小.

//make a 5x2 dynamic jagged array, 100% resizable any time
std::vector<std::vector<int>> container1(5, std::vector<int>(2)); 
//make a 5x2 dynamic rectangular array, can resize the 5 but not the 2
std::vector<std::array<2, int>> container1(5); 
//make a 5x2 automatic array, can't resize the 2 or 5 but is _really fast_.
std::array<5, std::array<2, int>> container;

所有这些都可以初始化并使用与您已有的代码相同,除非它们更容易构建,并且您不必销毁它们.

标签:c,c11,unique-ptr
来源: https://codeday.me/bug/20191005/1855386.html