aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorColin Snover2017-10-06 21:05:38 -0500
committerColin Snover2017-10-06 22:10:50 -0500
commitf037d4df1680aecefac2ffb240547385a74971d0 (patch)
treec9c5195328bae7ff7bc59b8c0adbbf2e6e3d717e /common
parent79dd02373cb431adfceeb4be50366b7c084490d9 (diff)
downloadscummvm-rg350-f037d4df1680aecefac2ffb240547385a74971d0.tar.gz
scummvm-rg350-f037d4df1680aecefac2ffb240547385a74971d0.tar.bz2
scummvm-rg350-f037d4df1680aecefac2ffb240547385a74971d0.zip
COMMON: Allow construction of Arrays of non-copyable members
Although the previous count-constructor would never make a copy of a member at runtime, Array<T>::reserve *may* copy-construct, so the compiler would forbid creation of arrays of NonCopyable objects even when the array was created only once and then never resized (and thus never actually tried to perform a copy-construction).
Diffstat (limited to 'common')
-rw-r--r--common/array.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/common/array.h b/common/array.h
index 1645db05b1..d4dac35866 100644
--- a/common/array.h
+++ b/common/array.h
@@ -63,9 +63,10 @@ public:
* Constructs an array with `count` default-inserted instances of T. No
* copies are made.
*/
- explicit Array(size_type count) : _size(0) {
+ explicit Array(size_type count) : _size(count) {
allocCapacity(count);
- resize(count);
+ for (size_type i = 0; i < count; ++i)
+ new ((void *)&_storage[i]) T();
}
/**