【问题标题】:C++ Function call with a 'new' array argument带有“新”数组参数的 C++ 函数调用
【发布时间】:2012-07-24 07:55:10
【问题描述】:

我想调用一个需要整数数组的函数。每次我想调用函数时,如果不创建一个新的整数数组,我怎么能做到这一点?

这就是我想做的:

someFunction(new int[]{obj[0].getInt(), obj[1].getInt()});

而不是这样做:

int intArray[2] = {obj[0].getInt(), obj[1].getInt()};    
someFunction(intArray);

【问题讨论】:

  • 不,您确实不想要第一个示例。第二个有什么问题?
  • 呃。什么?第一个示例在您每次要调用该函数时创建一个新数组。
  • 第一个示例可能会造成内存泄漏。
  • 第二种方式是惯用的 C++。不要试图把语言变成它不是的东西,尤其是为了节省一行代码。
  • @BobSmith 防止内存泄漏不仅仅是发送垃圾邮件deletes 以首先对抗news 无故发送垃圾邮件。这不是 Java。

标签: c++ arrays argument-passing


【解决方案1】:

假设您可以使用 C++11,您可以定义 somefunction 以采用 std::vector(或 std::vector const &)而不是实际数组,然后使用:

somefunction({obj[0].getInt(), obj[1].getInt()});

与 Java 不同,您确实不需要在 C++ 中定期使用new。事实上,在大多数编写良好的代码中,这是相当不寻常的。

顺便说一句,您通常希望避免使用 C++ 的内置数组,而 C++11 使这样做更容易,以至于根本没有充分的理由使用它们。

【讨论】:

  • std::initializer_list 可能会比std::vector 更有效率。
  • @FredOverflow:是的,你可以直接接受std::initializer_list,但假设你想要一个数组之类的东西,std::vector 大致相似,并且有一个本身接受std::initializer_list 的ctor ...
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2021-11-30
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2018-10-12
  • 2012-02-26
相关资源
最近更新 更多