diff --git a/uppsrc/Core/Vcont.h b/uppsrc/Core/Vcont.h index 521626678..4209e789f 100644 --- a/uppsrc/Core/Vcont.h +++ b/uppsrc/Core/Vcont.h @@ -129,7 +129,7 @@ class Vector : public MoveableAndDeepCopyOption< Vector > { public: T& Add() { if(items >= alloc) GrowF(); return *(::new(Rdd()) T); } - T& Add(const T& x) { return items < alloc ? *(new(Rdd()) T(x)) : GrowAdd(x); } + T& Add(const T& x) { return items < alloc ? *(new(Rdd()) T(clone(x))) : GrowAdd(x); } T& Add(T&& x) { return items < alloc ? *(::new(Rdd()) T(pick(x))) : GrowAdd(pick(x)); } template T& Create(Args&&... args) { if(items >= alloc) GrowF(); return *(::new(Rdd()) T(std::forward(args)...)); } @@ -278,7 +278,7 @@ protected: public: T& Add() { T *q = new T; vector.Add(q); return *q; } - T& Add(const T& x) { T *q = new T(x); vector.Add(q); return *q; } + T& Add(const T& x) { T *q = new T(clone(x)); vector.Add(q); return *q; } T& Add(T&& x) { T *q = new T(pick(x)); vector.Add(q); return *q; } T& Add(T *newt) { vector.Add(newt); return *newt; } template diff --git a/uppsrc/Core/Vcont.hpp b/uppsrc/Core/Vcont.hpp index 8fdb25e2c..1e132a8f6 100644 --- a/uppsrc/Core/Vcont.hpp +++ b/uppsrc/Core/Vcont.hpp @@ -155,7 +155,7 @@ template T& Vector::GrowAdd(const T& x) { T *prev = vector; bool b = GrowSz(); - T *q = new(Rdd()) T(x); + T *q = new(Rdd()) T(clone(x)); if(b) RawFree(prev); return *q; }