我想使用boost :: shared_ptr,以便在我的函数超出范围时调用WSACleanup(),如下所示:
void DoSomething() {
WSAStartup(...);
boost::shared_ptr<void> WSACleaner(static_cast<void*>(0), WSACleanup);
}
这不编译,
Error 1 error C2197: 'int (__stdcall *)(void)' : too many arguments for call C:\projects\svn-5.3\ESA\Common\include\boost\detail\shared_count.hpp 116
有什么想法吗?
答案 0 :(得分:1)
来自文档:“表达式d(p)必须是格式良好的”(即WSACleanup(static_cast<void*>(0)
必须格式良好。)
一种可能的解决方案:
boost::shared_ptr<void> WSACleaner(static_cast<void*>(0),
[](void* dummy){WSACleanup();});
答案 1 :(得分:1)
您可以创建一个类A
,析构函数可以使用WSACleanup
和shared_ptr实例:
class A
{
public:
~A() { WSACleanup(...); }
}
....
void DoSomething() {
WSAStartup(...);
boost::shared_ptr<A> x(new A);
}