2012-03-03 224 views
0

可能重複:
Do the parentheses after the type name make a difference with new?
What do the following phrases mean in C++: zero-, default- and value-initialization?C++矢量動初始化

伊夫使用載體而沒有任何問題,但還是有疑問的。 我總是用這樣的代碼,

vector<int>* v1 = new vector<int>; 

這樣,我可以使用:

vector<int>* v2 = new vector<int>(); 

我知道什麼()做,但什麼區別?在v1中,矢量是否曾初始化任何整數?

+7

爲什麼使用'new'? 'vector v1'有什麼問題;'? – 2012-03-03 19:38:42

回答

1

首先你的問題:新的調用默認的構造函數,你不需要做「手動」。 但是:儘量在C++中儘量使用值類型。它們不僅更快,而且更容易和更安全,因爲析構函數在離開範圍時會自動調用。 所以只寫

std::vector<int> v; // Calls default constructor 

如果你真的需要堆,嘗試使用智能指針比如shared_ptr的和的unique_ptr,這樣,你不能忘記調用刪除。 (並刪除也稱爲析構函數,不需要手動執行此操作。)

0

兩種說法都一樣。這兩種情況下都會調用不帶參數的構造函數。