从智能指针获取原始指针

Bor*_*ile 4 c++ pointers smart-pointers c++11 c++14

如果这是重复的道歉...希望不是.我搜索了一长串问题,但他们似乎并没有真正解释它.

这里是:在下面

int main(int,char**){
    auto a = make_unique<std::string>("Hello World");

    // do stuff with either &*a or a.get()

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

&*a和之间有什么区别a.get()?我知道他们都返回原始指针值(除非operator&是重载),但是选择一个优于另一个有任何运行时优势吗?

Wer*_*nze 6

&*a如果指针是nullptr,则是未定义的行为.您可以了解更多关于未定义行为在这里.

在所有其他情况下,我认为两种解决方案都是完全相同的.我更愿意使用,get()因为这是每个人都理解的直接方式.

从C++标准:

20.9.1.2.4 unique_ptr观察者[unique.ptr.single.observers]

typename add_lvalue_reference :: type operator*()const;
1需要:get()!= nullptr.
2返回:*get().