2010-03-09 79 views
0

在C++中,是使用一個對象的向量一個好主意?如果沒有,這個C++代碼有什麼問題?C++,對象的向量

#include <vector> 

using namespace std; 

class A {}; 

int main() { 

     vector<A*> v (new A); 
     return 0; 
} 

從克++:

13: error: invalid conversion from A*' to unsigned int'

回答

11

constructor for std::vector需要的初始長度,而不是元素。

這意味着你通常會怎麼做:

​​

你得到編譯器錯誤你是因爲你的系統上,size_type被定義爲unsigned int。它試圖使用該構造函數,但失敗,因爲您將它傳遞給了一個指針A.

4

在使用您不知道的東西之前,您需要閱讀documentation

下面是對std::vector類的不同的構造函數:

explicit vector (const Allocator& = Allocator()); 
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 
template <class InputIterator> 
     vector (InputIterator first, InputIterator last, const Allocator& = Allocator()); 
vector (const vector<T,Allocator>& x); 
2

矢量沒有一個構造函數一個項目來存儲。

爲了一個項目的矢量與給定值:

vector<A*> v (1, new A); 

至於是否是有指針動態分配對象的vector是一個好主意 - 沒有。您必須手動管理該內存。

按值存儲對象或者必須使用智能指針來自動管理內存(例如std :: tr1 :: shared_ptr)會更好。

1

我會建議不要使用std::vector像這樣:內存管理成爲一場噩夢。 (例如,vector<A*> v (10, new A);有十個指針,但只有一個已分配的對象,並且您必須記住只能釋放一次。如果您未取消分配,則您的內存不確定。)

請改爲使用Boost Pointer Container library:你可以傳入新分配的對象,它會爲你處理所有的內存管理。