gpt4 book ai didi

c++ - operator () 括号是否在函数调用中创建的对象上被调用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:15 28 4
gpt4 key购买 nike

我有一个类似于句柄“智能指针”的类。

#define DEST 123

HANDLE OpenHandle(int dest);
class SmartHandle;
void SendMsg(HANDLE dest_handle);

SendMsg(SmartHandle(OpenHandle(DEST)))

这个构造在我的代码中经常使用,所以它确实有效,但我不明白为什么。

OpenHandle(DEST) 返回“智能指针”类的句柄

SendMsg - 采用与 OpenHandle 返回的相同类型的参数,这是一个简单的 HANDLE 又名 void*

要让这个东西起作用,它必须意味着 HANDLE SmartHandle::operator() 被调用。

问题

为什么 HANDLE SmartHandle::operator() 被调用?

查看代码,我只想说创建了一个类型为 SmartHandle 的对象并且没有返回任何内容,然后调用了 SmartHandle 析构函数。

最佳答案

不,这样的电话:

HANDLE h;
SmartHandle(h);

不调用 SmartHandle::operator()。相反,它创建一个 SmartHandle 类型的临时对象,使用 h 参数构造。也就是说,它正在调用构造函数 SmartHandle::SmartHandle(HANDLE)

您的代码之所以有效,是因为您的类很可能有一个 operator HANDLE() 将您的类型的对象转换回 HANDLE。因此,您的代码执行以下操作序列:

{
HANDLE tmp1 = OpenHandle(DEST);
SmartHandle tmp2(tmp1);
HANDLE tmp3 = tmp2.operator HANDLE();
SendMsg(tmp3);
} //at the end of the full sentence temporaries are destroyed.

关于c++ - operator () 括号是否在函数调用中创建的对象上被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com