我以前从未见过这种事情-我对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
}
答案 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。