【发布时间】:2017-04-17 18:57:09
【问题描述】:
我编写了一个将公斤转换为磅和石头的代码。一个 sn-p 如下所示。
float *weightoutput = weight_conversion(weight);
具有如下功能。我使用了一个 C 风格的数组,
float* weight_conversion(float x){
float *stones_pounds = new float[2]; //C-style array
float z, y;
z = x*0.15747304441776971; // (1 stone = 6.3503 kilo)
y = x*2.2026; // (1 kilo = 2.2026 pounds)
stones_pounds[0] = z;
stones_pounds[1] = y;
return stones_pounds;
}
我在多篇文章中读到,如果您使用“new”,则必须使用“delete”来释放内存。我的问题是,如何在此设置中删除stone_pounds。由于 stone_pounds 一直使用到函数中的最后一行作为回报,我认为我不能在函数中使用 delete [] stone_pounds。由于它不是全局变量,因此我也无法在主函数中删除它。那么如何使用 delete[] 运算符来释放内存呢?改变代码结构以方便 delete[] 运算符的唯一替代方法是什么?
【问题讨论】:
-
为什么不使用
std::vector或std::array?编辑:在这种情况下,您实际上可以返回一个std::pair<float, float>,这可能会更清晰 -
请参阅this question on returning arrays。您仍然可以在返回中使用 C 样式的数组,而根本不需要使用
new[](通过使用struct)。 -
见鬼,为什么不直接返回
struct? -
顺便说一句:
x是什么?z是什么?y是什么?这些变量名称对输入或结果没有任何意义。除非您可能需要返回 10、50 甚至 1000 个值(即,如果它始终只有两个值),否则具有明确名称(以及函数的明确参数名称)的数据结构会使这段代码变得很多更清楚它在做什么。 -
@RyanP 我同意。在我转向 std::vector 之前,我只是在尝试这个选项。
标签: c++ delete-operator