C++ 是否可以释放分配给多维数组的内存
我基本上有一个C++ 是否可以释放分配给多维数组的内存,c++,matrix,memory,C++,Matrix,Memory,我基本上有一个uint64_t[8][3]但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这会更难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引 例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3]如何释放此节点?您不能释放它,它是cpp,这就是它的工作原理 如果使用delete(例如delete variableName[0][2])动态分配某些索引中的元素,则可以释放这些元素,但不能删除索引本身。这是
uint64_t[8][3]
但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这会更难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引
例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3]如何释放此节点?您不能释放它,它是cpp,这就是它的工作原理 如果使用delete(例如delete variableName[0][2])动态分配某些索引中的元素,则可以释放这些元素,但不能删除索引本身。这是不可能的,或者至少不是您希望的方式。如果您正试图实现一个类似二叉树的结构,那么看看这种树结构,您可以只动态地分配您需要的内容
如果您仍然需要数组,不使用旧的C样式数组,C++委员会自1998以来一直在积极更新标准,而使用数组的现代方式正在使用。如果你在一个环境中工作,你在使用旧的C-API,那么用现代C++编写你的逻辑,编译它并链接到你的C-API中的那个库。p> 也就是说,如果您担心性能或内存问题,您应该重新考虑您的思维方式,许多年轻的开发人员会陷入这种思维模式,最终编写的代码在设计上既不快速也不优雅(称为代码)。当您编写一个程序时,首先从可读和简单的设计开始,然后进行分析,找出什么是慢的,应该进行优化
如果您确实需要数组中的某些值为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};
};
};
类整数
{
公众:
显式整数(int值)
{
价值=价值;
};
整数和运算符=(整数其他)
{
值=其他值;
};
私人:
int值;
};
课堂测试
{
公众:
测试()
{
整数四(4);
数组arr={std::make_unique(四),nullptr};
};
};
注:我上面写的只是一个技巧,所以你知道C++中一切都是可能的,但是我写的东西的复杂性,让你相信,这不是你的简单案例的好方法。< /P>
注二:代码未经测试,请不要像在生产代码中那样使用此代码。您不能。这是一小部分不值得担心的未使用空间。而是使用
std::vector
,使用不可能的原始数组。一个数组被分配,它就被分配。您必须释放全部或全部,在这种情况下,您将自动分配。当变量超出范围时,系统会释放自动变量。您不能提前发布它们,但可以调整代码以缩小范围。如果你想少用一个数组,可以添加一个簿记变量来跟踪容量。谢谢大家。为什么每个人都发表评论而不是回答。现在我不能不删除它就结束这个问题。为什么每个人都发表评论而不是回答最有可能的原因是,写一个比“你不能。使用向量
”更完整的答案将持续数页,涉及许多主题。这是一个最好留给书本的范围。注意:实际上,您也不能使用向量来执行此操作vector
就是保存你不使用的内存,并保存一堆簿记,记录它没有被使用的事实。这不是一个有用的答案。