Mic*_*ell 5 c++ pointers smart-pointers
我正在学习 C++ 测试,其中一个问题如下:
std::unique_ptr<Rectangle> rec = std::make_unique<Rectangle>(0, 0, 15, 15);
// why must we use rec.get()->?
rec.get()->setWidth(30);
rec.get()->draw();
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我们需要这里.get()?如果我省略了,这会是一样的吗.get(),如下所示:
rec->setWidth(30);
rec->draw();
Run Code Online (Sandbox Code Playgroud)
根据cppreference,使用->运算符相当于使用get()函数(下面引用中的情况 2):
类型名 std::add_lvalue_reference::type 运算符 *() const; (1)
指针运算符->() const noexcept;(2)
返回值
1)返回*this拥有的对象,相当于*get()。
2)返回一个指向*this所拥有的对象的指针,即get()。
此外,举例来说(尽管永远不应该依赖于STL 的特定实现),头文件的 Visual Studio (MSVC) 版本中的定义std::unique_ptr::get()及其“等效”运算符是相同的:-><memory>
_NODISCARD pointer get() const noexcept {
return _Mypair._Myval2;
}
_NODISCARD pointer operator->() const noexcept {
return _Mypair._Myval2;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |