forked from boostorg/smart_ptr
Merge branch 'develop'
This commit is contained in:
@ -39,6 +39,8 @@ include::smart_ptr/intrusive_ref_counter.adoc[]
|
|||||||
|
|
||||||
include::smart_ptr/local_shared_ptr.adoc[]
|
include::smart_ptr/local_shared_ptr.adoc[]
|
||||||
|
|
||||||
|
include::smart_ptr/make_local_shared.adoc[]
|
||||||
|
|
||||||
include::smart_ptr/pointer_cast.adoc[]
|
include::smart_ptr/pointer_cast.adoc[]
|
||||||
|
|
||||||
include::smart_ptr/pointer_to_other.adoc[]
|
include::smart_ptr/pointer_to_other.adoc[]
|
||||||
|
81
doc/smart_ptr/make_local_shared.adoc
Normal file
81
doc/smart_ptr/make_local_shared.adoc
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
////
|
||||||
|
Copyright 2017 Glen Joseph Fernandes (glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
|
||||||
|
See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
////
|
||||||
|
|
||||||
|
[#make_local_shared]
|
||||||
|
# make_local_shared: Creating local_shared_ptr
|
||||||
|
:toc:
|
||||||
|
:toc-title:
|
||||||
|
:idprefix: make_local_shared_
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
The function templates `make_local_shared` and `allocate_local_shared` provide
|
||||||
|
convenient, safe and efficient ways to create `local_shared_ptr` objects. They
|
||||||
|
are analogous to `make_shared` and `allocate_shared` for `shared_ptr`.
|
||||||
|
|
||||||
|
## Synopsis
|
||||||
|
|
||||||
|
`make_local_shared` and `allocate_local_shared` are defined in
|
||||||
|
`<boost/smart_ptr/make_local_shared.hpp>`.
|
||||||
|
|
||||||
|
[subs=+quotes]
|
||||||
|
```
|
||||||
|
namespace boost {
|
||||||
|
`// only if T is not an array type`
|
||||||
|
template<class T, class... Args>
|
||||||
|
local_shared_ptr<T> make_local_shared(Args&&... args);
|
||||||
|
template<class T, class A, class... Args>
|
||||||
|
local_shared_ptr<T> allocate_local_shared(const A& a, Args&&... args);
|
||||||
|
|
||||||
|
`// only if T is an array type of the form U[]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared(std::size_t n);
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared(const A& a, std::size_t n);
|
||||||
|
|
||||||
|
`// only if T is an array type of the form U[N]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared();
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared(const A& a);
|
||||||
|
|
||||||
|
`// only if T is an array type of the form U[]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared(std::size_t n,
|
||||||
|
const remove_extent_t<T>& v);
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared(const A& a, std::size_t n,
|
||||||
|
const remove_extent_t<T>& v);
|
||||||
|
|
||||||
|
`// only if T is an array type of the form U[N]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared(const remove_extent_t<T>& v);
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared(const A& a,
|
||||||
|
const remove_extent_t<T>& v);
|
||||||
|
|
||||||
|
`// only if T is not an array type of the form U[]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared_noinit();
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared_noinit(const A& a);
|
||||||
|
|
||||||
|
`// only if T is an array type of the form U[N]`
|
||||||
|
template<class T>
|
||||||
|
local_shared_ptr<T> make_local_shared_noinit(std::size_t n);
|
||||||
|
template<class T, class A>
|
||||||
|
local_shared_ptr<T> allocate_local_shared_noinit(const A& a,
|
||||||
|
std::size_t n);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
The requirements and effects of these functions are the same as `make_shared`
|
||||||
|
and `allocate_shared`, except that a `local_shared_ptr` is returned.
|
@ -251,7 +251,7 @@ Note, however, that `shared_ptr` copies created from `pw` will not "register" in
|
|||||||
they will share the single reference created in `make_shared_from_COM`. Weak pointers created from `pw` will be invalidated when the last
|
they will share the single reference created in `make_shared_from_COM`. Weak pointers created from `pw` will be invalidated when the last
|
||||||
`shared_ptr` is destroyed, regardless of whether the COM object itself is still alive.
|
`shared_ptr` is destroyed, regardless of whether the COM object itself is still alive.
|
||||||
|
|
||||||
As link:../../libs/bind/mem_fn.html#Q3[explained] in the `mem_fn` documentation, you need to `#define BOOST_MEM_FN_ENABLE_STDCALL` first.
|
As link:../../../../libs/bind/mem_fn.html#Q3[explained] in the `mem_fn` documentation, you need to `#define BOOST_MEM_FN_ENABLE_STDCALL` first.
|
||||||
|
|
||||||
[#techniques_intrusive]
|
[#techniques_intrusive]
|
||||||
## Using a shared_ptr to hold a pointer to an object with an embedded reference count
|
## Using a shared_ptr to hold a pointer to an object with an embedded reference count
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
"Glen Fernandes"
|
"Glen Fernandes"
|
||||||
],
|
],
|
||||||
"description": "Smart pointer class templates.",
|
"description": "Smart pointer class templates.",
|
||||||
"documentation": "smart_ptr.htm",
|
|
||||||
"std": [
|
"std": [
|
||||||
"tr1"
|
"tr1"
|
||||||
],
|
],
|
||||||
|
@ -122,7 +122,7 @@ static void test_const_cast()
|
|||||||
|
|
||||||
BOOST_TEST( p2.get() == 0 );
|
BOOST_TEST( p2.get() == 0 );
|
||||||
BOOST_TEST_EQ( p3.get(), q1 );
|
BOOST_TEST_EQ( p3.get(), q1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct B2
|
struct B2
|
||||||
|
Reference in New Issue
Block a user