From 39b6e637be8a139a5f63da336c3aa7bf4e328b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Thu, 19 Mar 2015 16:09:28 +0800 Subject: [PATCH] make_cow --- README.md | 2 +- TinySTL/COWPtr.h | 5 +++++ TinySTL/Test/COWPtrTest.cpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59b47a3..3f76540 100644 --- a/README.md +++ b/README.md @@ -569,7 +569,7 @@ TinySTL ####(19):cow_ptr - cow_ptr cp1(new string("zouxiaohang")); + cow_ptr cp1 = make_cow("zouxiaohang"); auto cp2 = cp1, cp3 = cp1; assert(cp1 == cp2 && cp2 == cp3); assert(*cp1 == *cp2 && *cp2 == *cp3 && *cp3 == "zouxiaohang"); diff --git a/TinySTL/COWPtr.h b/TinySTL/COWPtr.h index d758e1b..67886e7 100644 --- a/TinySTL/COWPtr.h +++ b/TinySTL/COWPtr.h @@ -68,6 +68,11 @@ namespace TinySTL{ template friend class Detail::proxy; }; + + template + cow_ptr make_cow(Args...args){ + return cow_ptr(new T(std::forward(args)...)); + } } #include "Detail\COWPtr.impl.h" diff --git a/TinySTL/Test/COWPtrTest.cpp b/TinySTL/Test/COWPtrTest.cpp index 41bc178..7fddae0 100644 --- a/TinySTL/Test/COWPtrTest.cpp +++ b/TinySTL/Test/COWPtrTest.cpp @@ -28,7 +28,7 @@ namespace TinySTL{ assert(cp4 == nullptr); } void testCase2(){ - cow_ptr cp1(new string("zouxiaohang")); + cow_ptr cp1 = make_cow("zouxiaohang"); auto cp2 = cp1, cp3 = cp1; assert(cp1 == cp2 && cp2 == cp3); assert(*cp1 == *cp2 && *cp2 == *cp3 && *cp3 == "zouxiaohang");