2014-01-19 43 views
0

如何調用運算符new[]內的特定類構造函數?構造數組

#include <iostream> 

class foo 
{ 
    public: 
    foo(){std::cout << "\nfoo::foo()\n";} 
    foo(int param){std::cout << "\nfoo::foo(int)\n";} 
}; 

int main() 
{ 
    foo* my_array = new foo[45]; 
    return 0; 
} 

foo* my_array = new foo[45];會打電話foo()構造。如何調用foo(int)構造函數?

+0

可能重複[初始化構造函數中的數組而不使用默認構造函數或賦值](http://stackoverflow.com/questions/3798276/initialize-array-in-constructor-without-using-default-constructor-or-assignment ) –

回答

4

對於原始數組,沒有辦法做到這一點。你可以達到同樣的效果與標準::向量 explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type());

std::vector<foo> my_vector(45, 10); 

將創建45 foo對象,每個對象通過foo(10)構造函數調用產生的載體。

+1

你可以縮短爲'std :: vector v(45,10);' – Borgleader

+1

你不錯過模板參數?還值得注意的是,構造函數只被調用一次。其他元素將通過副本進行管理,因此管理資源的對象必須具有適當的副本構造函數。 – typ1232

+0

*有一種方法可以爲數組執行此操作,對於長陣列來說它只是有點繁瑣。 – juanchopanza