是否可以释放分配给多维数组的内存

时间:2018-11-29 18:30:11

标签: c++ matrix memory

我基本上有一个uint64_t[8][3],但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地仅设置适当的位置,但是因为我依赖矩阵的索引,所以这会更困难特定程序。如何有选择地释放矩阵的某些索引。

例如,对于特定节点,我不需要uint64_t [4] [3]或uint64_t [7] [3],我如何释放它?

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的工作方式...