gpt4 book ai didi

c++ - C++ 类中二维数组的正确内存分配

转载 作者:行者123 更新时间:2023-11-30 04:35:42 26 4
gpt4 key购买 nike

我正在编写一个 C++ 类,它使用一些固定数组以及一些动态分配的数组。我想知道是否有人可以指导我为动态数组分配内存的正确方法,可能是在构造函数/解构函数中,以及我是否需要显式调用它们以确保我不会出现段错误。这是我的代码相关部分的简化版本:

class Network {

public:
int n_nodes;
int user_index[MAX_USERS]; //a fixed array
int adjacency_matrix[][MAX_ITEMS];

//Network(int n_node, int** adjacency); //I would rather to set the element s in a function other than the constructor
Initializer(int n_node, int** adjacency);
~Netowrk();
}

所以这是我对这门课的具体问题:

1 - 我能否让二维数组 adjacency_matrix[][] 具有未定的行数和列数,直到它由用户在初始化函数中设置?

2 - 我应该在哪里删除二维数组?我应该把它写在解构函数中吗?我应该显式调用解构函数吗?在解构器中还有什么我需要销毁的吗?

最佳答案

1 - Can I have the 2D array adjacency_matrix[][] with undecided number of rows and columns until it's set by the user in the initializer function?

是的。然而,最好的方法是根本不使用数组。相反,使用 std::vector ,它为您管理内存。有两种方法可以做到这一点。如果您真的希望能够使用 [row][column]访问元素的语法,您需要使用 std::vector 的两个维度小号:

std::vector<std::vector<int> > adjacency_matrix;

一旦知道尺寸,就可以填充它:

adjacency_matrix.assign(rows, std::vector<int>(columns));

通常更容易使用包含所有元素的一维数组(或 std::vector<int> )并使用 row * row_count + column访问索引 (row, column) 处的元素.这样,动态分配就更少了。您可以将访问元素的逻辑包装到几个辅助函数中。

2 - where should I delete the 2D array? should I write it in the deconstructor?

您不必 delete如果你使用 std::vector 什么都行.它会自行清理。

Should I call the [destructor] explicitly?

没有。

Is there anything else I need to destroy in the [destructor]?

理想情况下,不会。如果您使用标准库容器,例如 std::vector和智能指针,你不应该清理任何东西。您应该避免尝试在 C++ 中自行管理资源:有库工具可以为您完成这项繁琐的任务,您应该利用它们。

关于c++ - C++ 类中二维数组的正确内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036447/

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