From 5c8f4b14b4fab369ac8fe7985b379e990b3060f3 Mon Sep 17 00:00:00 2001 From: Avril Date: Sat, 5 Jun 2021 17:07:07 +0100 Subject: [PATCH] moving cows is fine --- src/test/main.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/main.cpp b/src/test/main.cpp index 9d7c3be..a99f9b2 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -20,6 +20,14 @@ void read_fake(const Cow& clone) printf("read_fake: %s\n", clone.area_as()); } +void moving_cow(Cow moved) +{ + auto moved_clone = moved.reinterpret(); + strncpy(&moved_clone, "Ummmm....", moved_clone.size()); + + read_fake(moved); +} + int main() { Cow real(4096); @@ -40,5 +48,10 @@ int main() read_fake(real); printf("First byte of: real = %x, fake = %x\n", real[0], clone[0]); + moving_cow(std::move(real)); //moving real is fine + // <-- real is now dropped. But `clone` still holds Rc to _inner (cow_t). + printf("First byte of: fake = %x\n", clone[0]); + read_fake(clone); //clone still functions because of refcount on origin. + return 0; }