std::unique_ptr<T,Deleter>:: operator*, std::unique_ptr<T,Deleter>:: operator->
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
unique_ptr::operator*
unique_ptr::operator->
|
||||
| Non-member functions | ||||
|
(C++14)
(C++20)
|
||||
|
(until C++20)
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
typename
std::
add_lvalue_reference
<
T
>
::
type
operator
*
(
)
const
noexcept ( noexcept ( * std:: declval < pointer > ( ) ) ) ; |
(1) |
(C++11 이후)
(C++23부터 constexpr) |
|
pointer operator
-
>
(
)
const
noexcept
;
|
(2) |
(C++11 이후)
(C++23부터 constexpr) |
operator * 와 operator - > 는 * this 가 소유한 객체에 대한 접근을 제공합니다.
이러한 멤버 함수들은 단일 객체에 대해서만, 즉 기본 템플릿에 대해서만
unique_ptr
에 제공됩니다.
|
1)
만약
std
::
reference_converts_from_temporary_v
< std:: add_lvalue_reference_t < T > , decltype ( * std:: declval < pointer > ( ) ) > 가 true 인 경우, 프로그램은 형식에 맞지 않습니다. |
(C++23부터) |
만약 get ( ) 가 널 포인터인 경우, 동작은 정의되지 않습니다.
목차 |
반환값
예외
pointer
가 던지는
operator
*
를 가지고 있을 경우 예외를 던질 수 있습니다.
참고 사항
std::add_lvalue_reference 의 사용 목적은 std:: unique_ptr < void > 의 인스턴스화를 가능하게 하기 위함입니다. C++에서 void & 는 허용되지 않지만, std:: add_lvalue_reference < void > 는 void 를 생성하기 때문입니다. 자세한 내용은 LWG673 를 참조하십시오.
예제
#include <iostream> #include <memory> struct Foo { void bar() { std::cout << "Foo::bar\n"; } }; void f(const Foo&) { std::cout << "f(const Foo&)\n"; } int main() { std::unique_ptr<Foo> ptr(new Foo); ptr->bar(); f(*ptr); }
출력:
Foo::bar f(const Foo&)
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2762 | C++11 |
operator
*
가 잠재적으로 예외를 발생시킬 수 있음
심지어 * get ( ) 가 noexcept인 경우에도 |
조건부 예외 명세를
추가함 |
| LWG 4148 | C++23 |
operator
*
가 댕글링 참조를 반환할 수 있음
element_type*
가
Deleter::pointer
와 다른 경우
|
이 경우 프로그램은
ill-formed임 |
참고 항목
|
관리되는 객체에 대한 포인터를 반환합니다
(public member function) |