这段代码是取消引用指针还是做其他事情?
Is this code dereferencing a pointer or doing something else?
我以前从未见过这种事情 - 我对 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
}
来自
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
:
来使用较短的形式,而不是像成员函数那样调用运算符 - obj.operator @()
// 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。
我以前从未见过这种事情 - 我对 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
}
来自
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
:
obj.operator @()
// 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。