我有接受const矢量引用的方法。我想把一個可變的矢量版本放在堆上,然後返回將堆棧中的矢量複製到堆上
這個編譯,但我不確定它是否真的在做我的想法。我不確定我是否幸運地在這裏的內存:
vector<Type> *vect = new vector<Type>;
*vect = vectReference;
我有接受const矢量引用的方法。我想把一個可變的矢量版本放在堆上,然後返回將堆棧中的矢量複製到堆上
這個編譯,但我不確定它是否真的在做我的想法。我不確定我是否幸運地在這裏的內存:
vector<Type> *vect = new vector<Type>;
*vect = vectReference;
沒關係,你做了動態分配的vector
拷貝。但同樣可以在更短的方式使用拷貝構造函數,而不是默認的構造函數和賦值操作符來完成:
vector<Type> *vect = new vector<Type>(vectReference);
也想建議使用智能指針,而不是原料之一:std::unique_ptr
或std::shared_ptr
- 這取決於你的代碼語義。
我會建議不要使用指針。幾乎沒有任何理由動態分配'std :: vector'。 –
@JamesKanze E.g.另一個對象的幾個實例之間共享的'vector'對象。 – Rost
據我所知,你做對了。在第二行,您將vectReference中的矢量複製到堆中分配的vect上。
此代碼正常工作。
但是,你需要確保「VECT」分配空間,應該以後被釋放,所以你可能需要使用一個std :: auto_ptr的保證,該對象被銷燬:
std::auto_ptr<std::vector<Type> > vect(new std::vector<Type>);
*vect = vectReference;
這將執行你想要的。你甚至可以縮短其通過:
vector<Type> *vect = new vector<Type>(vectReference);
調用拷貝構造函數,而不是賦值運算符。
這裏最大的問題是:爲什麼你想在堆上放一個新的矢量?如果你不明白怎麼做,你可能不想這樣做。 – abarnert