2012-07-25 88 views
1

我想調用一個需要整數數組的函數。我怎麼能這樣做,而不是每次我想調用函數時創建一個新的整數數組?帶有'new'數組參數的C++函數調用

這就是我想做的事:

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

,而不是這樣做:

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

不,你不*想要第一個例子。第二個有什麼問題? – Xeo 2012-07-25 19:37:22

+1

呃。什麼?第一個示例在您每次調用該函數時創建一個新數組。 – 2012-07-25 19:37:45

+1

您可能會在第一個示例中創建內存泄漏。 – 2012-07-25 19:38:18

回答

4

假設你可以使用C++ 11,你可以定義somefunction採取的std::vector(或一個std::vector const &)而不是一個實際的陣列,然後使用:

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

與Java不同,你在做而不是需要在C++中定期使用new。事實上,在大多數寫得很好的代碼中,這是相當不尋常的。另一方面,您通常希望避免使用C++的內置數組,並且C++ 11使它更容易實現,因此很少有充分理由使用它們。

+0

'std :: initializer_list'可能比'std :: vector'更高效。 – fredoverflow 2012-07-25 20:10:02

+0

@FredOverflow:是的,你可以直接接受一個'std :: initializer_list',但假設你想要一個類似於數組的東西,一個'std :: vector'大致相似,並且有一個ctor本身接受一個'std :: initializer_list' ... – 2012-07-25 20:11:37