gpt4 book ai didi

c++ - 为动态二维数组创建正确的复制构造函数

转载 作者:行者123 更新时间:2023-11-30 01:27:28 25 4
gpt4 key购买 nike

当调用复制构造函数时,我的程序出现段错误。这就是我的 Grid 类的构造函数:

Grid::Grid(unsigned int grid_size) {
size = grid_size;
grid = new char *[size];
for(int i = 0; i < size; i++) {
grid[i] = new char[size];
}
}

而且,这是导致问题的我的复制构造函数:

Grid::Grid(Grid const &other_grid) {
size = other_grid.size;
grid = new char *[other_grid.size];
for(int i = 0; i < size; i++) {
grid[i] = new char[size];
}

for(int i = 0; i < size; i++) {
for(int j = 0; j < size; j++) {
grid[i][j] = other_grid.grid[i][j];
}
}
}

析构函数

Grid::~Grid() {
for(int i = 0; i < size; i++) {
delete [] grid[i];
}

delete [] grid;
}

运算符=重载

Grid & Grid::operator=(Grid const &other_grid) {
size = other_grid.size;
grid = new char *[other_grid.size];

for(int i = 0; i < other_grid.size; i++) {
for(int j = 0; j < other_grid.size; j++) {
grid[i][j] = other_grid.grid[i][j];
}
}
return *this;
}

最佳答案

不要将时间浪费在那种疯狂的手动分配上。使用 std::vector

class Grid {
Grid(unsigned int size);

private:
std::vector<std::vector<char>> grid;
};

Grid::Grid(unsigned int size)
: grid(size, std::vector<char>(size)) {}

并且您可以免费获得释放和工作拷贝(如果您使用的是现代编译器,还可以移动)。

关于c++ - 为动态二维数组创建正确的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8888936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com