首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WSACleanup中使用boost::shared_ptr

在WSACleanup中使用boost::shared_ptr
EN

Stack Overflow用户
提问于 2011-10-11 20:10:29
回答 2查看 230关注 0票数 1

我想使用boost::shared_ptr,以便在函数超出范围时调用WSACleanup(),如下所示:

代码语言:javascript
复制
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

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-11 20:14:40

文档中写道:“表达式d(p)必须是良构的”(即WSACleanup(static_cast<void*>(0)必须是良构的。)

一种可能的解决方案是:

代码语言:javascript
复制
boost::shared_ptr<void> WSACleaner(static_cast<void*>(0),
                                   [](void* dummy){WSACleanup();});
票数 1
EN

Stack Overflow用户

发布于 2011-10-11 20:17:56

您可以创建一个类A,它使用析构函数调用WSACleanup和shared_ptr的实例:

代码语言:javascript
复制
class A
{
    public:
        ~A() { WSACleanup(...); }
}

....

void DoSomething() {
    WSAStartup(...);
    boost::shared_ptr<A> x(new A);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7725821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档