From f92fdd190d056fe929f723e3f2ce9e0c0b141cec Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sun, 22 Apr 2012 22:04:46 +0200 Subject: Implement the move constructor for containers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This changes all the containers that uses QtPrivate::RefCount (QMap already had one), and QVariant In Qt 4.8, it was pointless to have the move constructor because we did not have quick way to re-initialize a null container. (shared_null still needed to be refcounted) But now that we have RefCount, and that the shared_null do not have reference count, we can implement a fast move constructor that do not generate code to increment the reference count. Change-Id: I2bc3c6ae96983f08aa7b1c7cb98d44a89255160b Reviewed-by: Jędrzej Nowacki --- tests/auto/other/collections/tst_collections.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'tests/auto/other/collections/tst_collections.cpp') diff --git a/tests/auto/other/collections/tst_collections.cpp b/tests/auto/other/collections/tst_collections.cpp index 472dd5020e..26e3ccfce4 100644 --- a/tests/auto/other/collections/tst_collections.cpp +++ b/tests/auto/other/collections/tst_collections.cpp @@ -2419,6 +2419,14 @@ bool isSharable(const Container &container) return !container.isDetached(); } +template Container newInstance() { + Container container; + populate(container); + if (!container.isEmpty()) + return container; + return Container(); +} + template void testContainer() { @@ -2539,10 +2547,20 @@ void testContainer() QVERIFY(!c2.isDetached()); QVERIFY(!c3.isDetached()); } + + /* test that the move operators work properly */ + { + Container c1 = Container(newInstance()); + QVERIFY(c1.size() == 4); + QVERIFY(c1 == newInstance()); + c1 = newInstance(); + QVERIFY(c1.size() == 4); + QVERIFY(c1 == newInstance()); + } } #define TEST_SEQUENTIAL_CONTAINER(Container) \ - testContainer, QMutable##Container##Iterator >() + testContainer, QMutable##Container##Iterator >() \ #define TEST_ASSOCIATIVE_CONTAINER(Container) \ testContainer, QMutable##Container##Iterator >() -- cgit v1.2.3