跳到主要内容

std::unique_ptr<T,Deleter>::operator*, std::unique_ptr<T,Deleter>::operator->

自 C++11 起
typename std::add_lvalue_reference<T>::type operator*() const
noexcept(noexcept(*std::declval<pointer>()));

pointer operator->() const noexcept;
自 C++23 起
typename std::add_lvalue_reference<T>::type operator*() constexpr
noexcept(noexcept(*std::declval<pointer>()));

pointer operator->() constexpr noexcept;

operator* 和 operator-> 提供对 `*this` 所拥对象的访问。

如果 `get() == nullptr`,行为是未定义的。

这些成员函数仅为 `unique_ptr` 的单个对象,即主模板提供。

参数

(无)

返回值

1)

返回 `*this` 所拥有的对象,等同于 `*get()`。

2)

返回指向 `*this` 所拥有的对象的指针,即 `get()`。

异常

1)

如果指针具有抛出 operator*,可能会抛出异常。

示例

#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&)

std::unique_ptr<T,Deleter>::operator*, std::unique_ptr<T,Deleter>::operator->

自 C++11 起
typename std::add_lvalue_reference<T>::type operator*() const
noexcept(noexcept(*std::declval<pointer>()));

pointer operator->() const noexcept;
自 C++23 起
typename std::add_lvalue_reference<T>::type operator*() constexpr
noexcept(noexcept(*std::declval<pointer>()));

pointer operator->() constexpr noexcept;

operator* 和 operator-> 提供对 `*this` 所拥对象的访问。

如果 `get() == nullptr`,行为是未定义的。

这些成员函数仅为 `unique_ptr` 的单个对象,即主模板提供。

参数

(无)

返回值

1)

返回 `*this` 所拥有的对象,等同于 `*get()`。

2)

返回指向 `*this` 所拥有的对象的指针,即 `get()`。

异常

1)

如果指针具有抛出 operator*,可能会抛出异常。

示例

#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&)