我基本上有一个uint64_t[8][3]
,但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地仅设置适当的位置,但是因为我依赖矩阵的索引,所以这会更困难特定程序。如何有选择地释放矩阵的某些索引。
例如,对于特定节点,我不需要uint64_t [4] [3]或uint64_t [7] [3],我如何释放它?
答案 0 :(得分:0)
如果某些索引中的元素是使用delete动态分配的(例如delete variableName [0] [2]),则可以释放它们,但是您不能自行删除索引。
答案 1 :(得分:0)
这是不可能的,或者至少不是您想要的方式。如果您尝试实现二进制树状结构,请以这种方式查看binary tree,您将拥有树状结构,您可以在其中动态分配您所需的内容。
如果仍然需要数组,请不要使用旧的c样式数组,c ++委员会自1998年以来一直在积极更新标准,并且使用数组的现代方法是使用std::array。如果您在使用旧C-API的环境中工作,请在现代c ++ static library中编写逻辑,然后对其进行编译,并在C-API中链接该库。
话虽如此,如果您担心性能或内存问题,则应重新考虑自己的思维方式,许多年轻的开发人员会陷入这种思维方式,最终编写出既不快速也不美观的代码。设计(称为pessimizing代码)。在编写程序时,首先要从易读和简单的设计入手,然后进行性能分析并弄清楚哪些是慢速的,应该对其进行优化。
如果您确实需要数组中的某些值为null,以便可以执行疯狂的操作(例如null检查,我极力劝阻),则应将整数包装在另一个类中:
class Integer
{
public:
explicit Integer(int value)
{
value_ = value;
};
Integer &operator=(Integer other)
{
value_ = other.value_;
};
private:
int value_;
};
class test
{
public:
test()
{
Integer four(4);
std::array<std::unique_ptr<Integer>, 2> arr = { std::make_unique<Integer>(four), nullptr};
};
};
注I:我上面写的只是一个技巧,所以您知道在c ++中一切皆有可能,但是我为满足您想要的目的而写的内容的复杂性应该使您确信,这不是简单的好方法情况。
注意II:该代码未经测试,请勿像生产代码中那样使用它。
答案 2 :(得分:-2)
您无法释放它,它就是cpp的工作方式...