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
と異なる場合
|
この場合プログラムは
不適格 |
関連項目
|
管理対象オブジェクトへのポインタを返す
(公開メンバ関数) |