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");