首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用boost::lock的析构函数的效果?

调用boost::lock的析构函数的效果?
EN

Stack Overflow用户
提问于 2012-03-27 17:43:13
回答 2查看 150关注 0票数 0

显式调用boost::lock对象的析构函数会有什么后果吗?

例如:

代码语言:javascript
运行
复制
boost::mutex M_;
boost::mutex::scoped_lock SL_(M_);
SL_.~unique_lock();

SL_.unlock();
SL_.lock();
//both of the above work on runtime as if nothing happened to SL_
//note: typedef unique_lock<mutex> scoped_lock;

出于好奇心问。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 17:45:18

代码语言:javascript
运行
复制
SL_.~unique_lock(); 

一旦调用本地存储上分配的对象的析构函数,它就不再是活动的。

在调用析构函数之后引用对象成员是一个未定义的行为

未定义的行为意味着任何行为都是可能的,并不一定意味着您的代码崩溃,但它意味着您可以看到不正确的行为或任何随机行为。

所以请不要那样做。

票数 2
EN

Stack Overflow用户

发布于 2012-03-27 17:44:50

显式调用堆栈分配的对象的析构函数是一个非常糟糕的想法(tm)。原因是一旦析构函数启动,从技术上讲,对象不再存在,但C++不知道,当对象超出范围时,将再次调用析构函数,这将导致未定义的行为。此外,在这样的对象上做任何其他事情(如调用成员函数)也是未定义的行为。因此,您不能期望从所描述的设置中获得任何合理的行为,只是不要这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9887000

复制
相关文章

相似问题

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