在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'
在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'
的constructor for std::vector需要的初始長度,而不是元素。
這意味着你通常會怎麼做:
你得到編譯器錯誤你是因爲你的系統上,size_type
被定義爲unsigned int
。它試圖使用該構造函數,但失敗,因爲您將它傳遞給了一個指針A.
在使用您不知道的東西之前,您需要閱讀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);
矢量沒有一個構造函數一個項目來存儲。
爲了一個項目的矢量與給定值:
vector<A*> v (1, new A);
至於是否是有指針動態分配對象的vector是一個好主意 - 沒有。您必須手動管理該內存。
按值存儲對象或者必須使用智能指針來自動管理內存(例如std :: tr1 :: shared_ptr)會更好。
我會建議不要使用std::vector
像這樣:內存管理成爲一場噩夢。 (例如,vector<A*> v (10, new A);
有十個指針,但只有一個已分配的對象,並且您必須記住只能釋放一次。如果您未取消分配,則您的內存不確定。)
請改爲使用Boost Pointer Container library:你可以傳入新分配的對象,它會爲你處理所有的內存管理。