在正确性或良好的代码结构方面,这种动态对象创建看起来如何
How does this dynamic object creation look like in terms of correctness or good code structure?
这是*算法的代码的一部分。我想知道这是否很好,还是最好在这里使用静态内存分配(我认为这会更好(。但不是C 的新事物。另外,我将网格用于算法,因此如何删除此内容。请指导。任何建议欢迎。谢谢。
for (int i = 0; i<world.size()-1 ; i++)
{
for(int j =0; j<world[0].size()-1; j++)
{
Node* a = new Node(make_pair(i,j), world[i][j]);
grid[i].push_back(*a);
}
}
当您将Node
而不是Node*
推到grid
向量时,您正在复制*a
的值(通过复制/移动构造器(。因此,分配的Node
仅用于复制,然后从未使用。
您应该使用本地变量,然后您不在乎侧面的任何删除
Node a = Node(make_pair(i,j), world[i][j]);
grid[i].push_back(a);
,也可以使网格成为指针的向量(vector<Node*>
(,然后推动a
本身。然后,您必须手动删除矢量中的所有指针,就像创建它们一样。
Node* a = new Node(make_pair(i,j), world[i][j]);
grid[i].push_back(a);
可以使用emplace
函数更好地使第一种情况改善 - 避免复制 - 在向量的数组中构造Node
:
grid[i].emplace_back(make_pair(i,j), world[i][j]);
在第二种情况下,您可以使用一些智能指针,例如std :: unique_ptr(vector>(,因此您不必手动删除指针。唯一_pointer的驱动器将处理它。
grid[i].push_back(make_unique<Node>(make_pair(i,j), world[i][j]));
提示将是存储地址而不是对象。地图将是管理节点的有用对象。
相关文章:
- C++中的动态对象与非动态对象
- 创建动态对象并将其推送到矢量中
- 删除包含包含动态对象的 STL 容器的智能指针
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- C++ 中的动态对象
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 删除动态对象的错误
- 关于删除动态对象数组
- 使用动态指针数组进行动态对象分配 - 使用什么删除?
- 如何在C++中创建动态对象列表
- C 动态对象类比较
- C++动态对象.如何在运行时确定对象大小?
- 使动态对象数组成为问题
- 动态对象指针数组C++
- 如何从操作员函数返回动态对象
- Qt创建动态对象并为同一信号分配不同的功能
- 如何在成员函数中创建动态对象
- C++ 对动态对象板进行建模
- 了解C++中的动态对象("new")