std::experimental::shared_ptr<T>:: shared_ptr
|
constexpr
shared_ptr
(
)
noexcept
;
|
(1) | |
|
constexpr
shared_ptr
(
std::
nullptr_t
)
noexcept
;
|
(2) | |
|
template
<
class
Y
>
explicit shared_ptr ( Y * ptr ) ; |
(3) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( Y * ptr, Deleter d ) ; |
(4) | |
|
template
<
class
Deleter
>
shared_ptr ( std:: nullptr_t ptr, Deleter d ) ; |
(5) | |
|
template
<
class
Y,
class
Deleter,
class
Alloc
>
shared_ptr ( Y * ptr, Deleter d, Alloc alloc ) ; |
(6) | |
|
template
<
class
Deleter,
class
Alloc
>
shared_ptr ( std:: nullptr_t ptr, Deleter d, Alloc alloc ) ; |
(7) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r, element_type * ptr ) noexcept ; |
(8) | |
|
shared_ptr
(
const
shared_ptr
&
r
)
noexcept
;
|
(9) | |
|
template
<
class
Y
>
shared_ptr ( const shared_ptr < Y > & r ) noexcept ; |
(9) | |
|
shared_ptr
(
shared_ptr
&&
r
)
noexcept
;
|
(10) | |
|
template
<
class
Y
>
shared_ptr ( shared_ptr < Y > && r ) noexcept ; |
(10) | |
|
template
<
class
Y
>
explicit shared_ptr ( const std:: weak_ptr < Y > & r ) ; |
(11) | |
|
template
<
class
Y
>
shared_ptr ( std:: auto_ptr < Y > && r ) ; |
(12) | |
|
template
<
class
Y,
class
Deleter
>
shared_ptr ( std:: unique_ptr < Y,Deleter > && r ) ; |
(13) | |
다양한 포인터 타입으로부터 관리할 객체를 참조하는
shared_ptr
을 생성합니다.
아래 설명의 목적상, 포인터 타입
Y*
가 포인터 타입
T*
와 호환된다고 말하는 것은
Y*
가
T*
로 변환 가능하거나,
Y
가 배열 타입
U[N]
이고
T
가
U cv []
(여기서 cv는 일부 cv-qualifiers 집합)인 경우를 말합니다.
shared_ptr
을 생성합니다. 즉, 빈
shared_ptr
입니다.
ptr
을 관리 객체에 대한 포인터로 사용하여
shared_ptr
을 생성합니다. 만약
T
가 배열 타입
U[N]
인 경우,
Y(*)[N]
는
T*
로 변환 가능해야 합니다. 만약
T
가 배열 타입
U[]
인 경우,
Y(*)[]
는
T*
로 변환 가능해야 합니다. 그렇지 않은 경우,
Y*
는
T*
로 변환 가능해야 합니다. 추가적으로:
T
가 배열 타입이 아닌 경우;
delete
[
]
ptr
,
T
가 배열 타입인 경우). 이를 삭제자로 사용합니다.
Y
는 완전한 타입이어야 합니다. 해당 delete 표현식은 올바르게 형성되어야 하며, 잘 정의된 동작을 가져야 하고 어떤 예외도 던지지 않아야 합니다.
Deleter
는
CopyConstructible
여야 하며, 복사 생성자와 소멸자는 예외를 던지지 않아야 합니다.
Alloc
는
Allocator
여야 하며, 해당 복사 생성자와 소멸자는 예외를 던지지 않아야 합니다.
shared_ptr
와 소유권 정보를 공유하지만, 관련 없고 관리되지 않는 포인터
ptr
를 보유하는
shared_ptr
을 생성합니다. 이
shared_ptr
이 그룹에서 마지막으로 스코프를 벗어나더라도, 원래
r
에 의해 관리되던 객체의 소멸자를 호출합니다. 그러나 이
shared_ptr
에서
get()
을 호출하면 항상
ptr
의 복사본을 반환합니다. 프로그래머는 이
ptr
이 해당 shared_ptr이 존재하는 동안 유효하게 유지되도록 보장할 책임이 있으며, 이는 일반적인 사용 사례에서
ptr
이
r
에 의해 관리되는 객체의 멤버이거나
r.
get
(
)
의 별칭(예: 다운캐스트)인 경우에 해당합니다.
r
가 관리하는 객체의 소유권을 공유하는
shared_ptr
을 생성합니다.
r
가 객체를 관리하지 않으면,
*
this
도 객체를 관리하지 않습니다. 템플릿 오버로드는
Y*
가
T*
와
호환되지 않을
경우 오버로드 결정에 참여하지 않습니다.
shared_ptr
를
r
에서 이동 생성합니다. 생성 후,
*
this
는
r
의 이전 상태 사본을 포함하며,
r
는 비어 있습니다. 템플릿 오버로드는
Y*
가
T*
와
호환되지 않는 경우
오버로드 결정에 참여하지 않습니다.
r
가 관리하는 객체의 소유권을 공유하는
shared_ptr
을 생성합니다.
Y*
는
T*
와 호환 가능해야 합니다
. 참고로 동일한 목적으로
r.
lock
(
)
를 사용할 수 있습니다: 차이점은 이 생성자는 인자가 비어 있을 경우 예외를 발생시키지만,
weak_ptr
<
T
>
::
lock
(
)
는 그 경우 빈
shared_ptr
을 생성한다는 점입니다.
shared_ptr
을 생성합니다.
Y*
는
T*
로 변환 가능해야 합니다. 생성 후에는
r
이 비어 있게 됩니다.
r
가 현재 관리하는 객체를 관리하는
shared_ptr
을 생성합니다.
r
와 연관된 삭제자는 관리 객체의 향후 삭제를 위해 저장됩니다.
r
는 이 호출 이후 어떤 객체도 관리하지 않습니다. 이 오버로드는
Y*
가
T*
와
호환되지 않는
경우 오버로드 해결에 참여하지 않습니다.
D
가 참조 타입인 경우, 다음 코드와 동등합니다:
shared_ptr
(
r.
release
(
)
,
std::
ref
(
r.
get_deleter
(
)
)
. 그렇지 않은 경우, 다음 코드와 동등합니다:
shared_ptr
(
r.
release
(
)
, r.
get_deleter
(
)
)
.
목차 |
참고 사항
파생된 타입의 객체에 대한 원시 포인터로부터
shared_ptr
을 생성할 때,
std::experimental::enable_shared_from_this
에서 파생된 경우,
shared_ptr
의 생성자들은
std::experimental::enable_shared_from_this
베이스의 비공개
weak_ptr
멤버를 갱신하여,
향후
shared_from_this()
호출이 이 원시 포인터 생성자에 의해 생성된
shared_ptr
와 소유권을 공유하도록 합니다.
원시 포인터 오버로드는 가리키는 객체의 소유권을 가정하므로, 이미
shared_ptr
에 의해 관리되는 객체에 대해 원시 포인터 오버로드를 사용하여
shared_ptr
을 생성하는 것은 객체가
std::experimental::enable_shared_from_this
에서 파생된 타입인 경우에도 정의되지 않은 동작을 초래할 수 있습니다.
매개변수
| ptr | - | 관리할 객체에 대한 포인터 |
| d | - | 객체를 파괴하는 데 사용할 삭제자 |
| alloc | - | 내부 사용을 위한 데이터 할당에 사용할 할당자 |
| r | - | 소유권을 공유하거나 소유권을 획득할 다른 스마트 포인터 |
예외
T
가 배열 타입이 아닌 경우,
delete
[
]
ptr
그 외의 경우)이 호출됩니다.
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
새로운 객체를 관리하는 shared pointer를 생성합니다
(함수 템플릿) |
|
|
할당자를 사용하여 할당된 새로운 객체를 관리하는 shared pointer를 생성합니다
(함수 템플릿) |