Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.get()和->;之间有区别吗;操作人员 我正在做一个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();_C++_Pointers_Smart Pointers - Fatal编程技术网

使用.get()和->;之间有区别吗;操作人员 我正在做一个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();

使用.get()和->;之间有区别吗;操作人员 我正在做一个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();,c++,pointers,smart-pointers,C++,Pointers,Smart Pointers,根据,使用->运算符相当于使用get()函数(下面引用的情况2): typename std::add_lvalue_reference::type operator*()const;(1) 指针运算符->()const noexcept;(2) 返回值 1) 返回*this拥有的对象,相当于*get()。 2) 返回指向*this拥有的对象的指针,即get() 此外,作为示例(尽管不应依赖于STL的特定实现),std::unique\u ptr::get()及其在标题的Visual Stu

根据,使用
->
运算符相当于使用
get()
函数(下面引用的情况2):

typename std::add_lvalue_reference::type operator*()const;(1)
指针运算符->()const noexcept;(2)

返回值
1) 返回*this拥有的对象,相当于*get()。
2) 返回指向*this拥有的对象的指针,即get()

此外,作为示例(尽管不应依赖于STL的特定实现),
std::unique\u ptr::get()
及其在
标题的Visual Studio(MSVC)版本中的“等效”操作符的定义是相同的

\u NODISCARD指针get()const noexcept{
返回我的配对;
}
_NODISCARD指针运算符->()常量noexcept{
返回我的配对;
}

.get()
在您的情况下是不必要的,因为
rec->draw()
将反引用基础指针,因此您可以使用与原始指针具有相同语法的唯一指针
.get()
在需要将唯一指针传递给以原始指针为参数的函数时是必需的

除了内存管理之外,智能指针在大多数方面都与原始指针类似。通过这种方式,它们很容易被采用,只需很少的改动。特别是,它们被设计为使用与原始指针相同的语法进行解引用。这意味着你可以用
rec->
代替
rec.get()->
,也可以用
*rec
代替
*(rec.get())

我怀疑写这个问题的人是在想“相对于
rec.setWidth()
”,只是不知道
unique\ptr
实现了
操作符->
。根据我的经验,大多数编程测试至少有点垃圾。有人可能会争辩说使用.get()和智能指针,而使用->和原始指针(越来越少见)的情况,因此这种分离在代码中是可见的。
rec->setWidth(30);
rec->draw();