[PATCH] D66178: Remove std::shared_ptr::make_shared and std::shared_ptr::allocate_shared
Zoe Carver via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 21 10:14:47 PST 2020
zoecarver updated this revision to Diff 245908.
zoecarver added a comment.
- Remove std::shared_ptr::allocate_shared
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66178/new/
https://reviews.llvm.org/D66178
Files:
libcxx/include/memory
Index: libcxx/include/memory
===================================================================
--- libcxx/include/memory
+++ libcxx/include/memory
@@ -3863,11 +3863,6 @@
return __r;
}
- template<class _Alloc, class ..._Args>
- static
- shared_ptr<_Tp>
- allocate_shared(const _Alloc& __a, _Args&& ...__args);
-
private:
template <class _Yp, bool = is_function<_Yp>::value>
struct __shared_ptr_default_allocator
@@ -4180,26 +4175,6 @@
__r.release();
}
-template<class _Tp>
-template<class _Alloc, class ..._Args>
-shared_ptr<_Tp>
-shared_ptr<_Tp>::allocate_shared(const _Alloc& __a, _Args&& ...__args)
-{
- static_assert( is_constructible<_Tp, _Args...>::value, "Can't construct object in allocate_shared" );
- typedef __shared_ptr_emplace<_Tp, _Alloc> _CntrlBlk;
- typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
- typedef __allocator_destructor<_A2> _D2;
- _A2 __a2(__a);
- unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
- ::new(static_cast<void*>(_VSTD::addressof(*__hold2.get())))
- _CntrlBlk(__a, _VSTD::forward<_Args>(__args)...);
- shared_ptr<_Tp> __r;
- __r.__ptr_ = __hold2.get()->get();
- __r.__cntrl_ = _VSTD::addressof(*__hold2.release());
- __r.__enable_weak_this(__r.__ptr_, __r.__ptr_);
- return __r;
-}
-
template<class _Tp>
shared_ptr<_Tp>::~shared_ptr()
{
@@ -4412,7 +4387,22 @@
>::type
allocate_shared(const _Alloc& __a, _Args&& ...__args)
{
- return shared_ptr<_Tp>::allocate_shared(__a, _VSTD::forward<_Args>(__args)...);
+ static_assert( is_constructible<_Tp, _Args...>::value, "Can't construct object in allocate_shared");
+
+ typedef __shared_ptr_emplace<_Tp, _Alloc> _CntrlBlk;
+ typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
+ typedef __allocator_destructor<_A2> _D2;
+
+ _A2 __a2(__a);
+ unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
+ ::new(static_cast<void*>(_VSTD::addressof(*__hold2.get())))
+ _CntrlBlk(__a, _VSTD::forward<_Args>(__args)...);
+
+ shared_ptr<_Tp> __r;
+ __r.__ptr_ = __hold2.get()->get();
+ __r.__cntrl_ = _VSTD::addressof(*__hold2.release());
+ __r.__enable_weak_this(__r.__ptr_, __r.__ptr_);
+ return __r;
}
template<class _Tp, class _Up>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66178.245908.patch
Type: text/x-patch
Size: 2347 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200221/9187fb43/attachment-0001.bin>
More information about the cfe-commits
mailing list