【发布时间】:2019-01-26 03:26:09
【问题描述】:
我正在尝试使用 unique_ptr 处理 winsock 的 addrinfo 指针。 在做了一些研究之后,我发现了一个没有得到很好解释的答案,所以现在我很困惑。 (我说的答案:Smart pointers with addrinfo struct)
所以我对unique_ptr的一般理解说语法如下:
unique_ptr<type of handled data, type of function deleting the data>(pointer, deleter function pointer);.
一个基本的例子是:
void deleteInt(int* ptr){...}
int* ptr = new int;
unique_ptr(int, void(*)(int*)>(ptr, deleteInt);
请注意函数类型如何没有指定名称,而只是有(*)。
现在,最后,谈谈我的问题:
在我上面提到的答案中,代码做了一些奇怪的事情。
不是unique_ptr<addrinfo, void(*)(addrinfo*)>...,而是unique_ptr<addrinfo, void(__stdcall*)(addrinfo*)>...,似乎没有人质疑它。怎么会这样?它如何改变函数的类型?什么是__stdcall?为什么它甚至可以工作,因为T (name*)() 甚至不是有效的语法?不用说,简单地将void(*)(addrinfo*) 作为函数类型是行不通的,并且会吐出一堆我不理解的难以理解的模板错误。
【问题讨论】:
标签: c++ function-pointers smart-pointers winsock2