2012-09-28 53 views
1

我有接受const矢量引用的方法。我想把一個可變的矢量版本放在堆上,然後返回將堆棧中的矢量複製到堆上

這個編譯,但我不確定它是否真的在做我的想法。我不確定我是否幸運地在這裏的內存:

vector<Type> *vect = new vector<Type>; 
*vect = vectReference; 
+1

這裏最大的問題是:爲什麼你想在堆上放一個新的矢量?如果你不明白怎麼做,你可能不想這樣做。 – abarnert

回答

1

沒關係,你做了動態分配的vector拷貝。但同樣可以在更短的方式使用拷貝構造函數,而不是默認的構造函數和賦值操作符來完成:

vector<Type> *vect = new vector<Type>(vectReference); 

也想建議使用智能指針,而不是原料之一:std::unique_ptrstd::shared_ptr - 這取決於你的代碼語義。

+0

我會建議不要使用指針。幾乎沒有任何理由動態分配'std :: vector'。 –

+0

@JamesKanze E.g.另一個對象的幾個實例之間共享的'vector'對象。 – Rost

1

據我所知,你做對了。在第二行,您將vectReference中的矢量複製到堆中分配的vect上。

1

此代碼正常工作。

但是,你需要確保「VECT」分配空間,應該以後被釋放,所以你可能需要使用一個std :: auto_ptr的保證,該對象被銷燬:

std::auto_ptr<std::vector<Type> > vect(new std::vector<Type>); 
*vect = vectReference; 
1

這將執行你想要的。你甚至可以縮短其通過:

vector<Type> *vect = new vector<Type>(vectReference); 

調用拷貝構造函數,而不是賦值運算符。