此代码是取消引用指针还是执行其他操作?

时间:2019-11-18 19:01:14

标签: shared-ptr

我以前从未见过这种事情-我对shared_ptr有点陌生-这是具有共享指针的典型操作,还是有人在这里做一些幻想?似乎不像是取消引用-看起来更像是有人试图确保定义了operator->()...

我已经以我能想到的许多方式在此方面做过google / duckduckgo,在网上找不到任何好的例子。

谢谢。

void fn(std::shared_ptr<int> data){
if(data.operator->() == NULL){
return; //this is an error
}

....//rest of function, doesn't matter

}

1 个答案:

答案 0 :(得分:1)

通过

T* operator->() const noexcept;

您正在访问shared_ptr的内部指针。如果它不是NULL,则可以读取此指针指向的数据。为此,您必须使用:

T& operator*() const noexcept;

因此,当您要检查shared_ptr是否指向一些数据并读取数据时,可以编写:

void fn(std::shared_ptr<int> data) {
    if(data.operator->() == NULL) // dereference pointer
       return; //this is an error

    int value = data.operator*(); // dereference data pointed by pointer
}

上面的代码是使用shared_ptr实例的理想方式。除了调用成员函数之类的运算符-obj.operator @()之外,您还可以通过应用@obj使用较短的形式:

 // this code does the same thing as above
void fn2(std::shared_ptr<int> data)
{
    if(!data)
       return; //this is an error

    int value = *data;
    std::cout << value << std::endl;
}

有关更多详细信息,请访问see reference