显式调用boost::lock
对象的析构函数会有什么后果吗?
例如:
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;
出于好奇心问。
发布于 2012-03-27 17:45:18
SL_.~unique_lock();
一旦调用本地存储上分配的对象的析构函数,它就不再是活动的。
在调用析构函数之后引用对象成员是一个未定义的行为。
未定义的行为意味着任何行为都是可能的,并不一定意味着您的代码崩溃,但它意味着您可以看到不正确的行为或任何随机行为。
所以请不要那样做。
发布于 2012-03-27 17:44:50
显式调用堆栈分配的对象的析构函数是一个非常糟糕的想法(tm)。原因是一旦析构函数启动,从技术上讲,对象不再存在,但C++不知道,当对象超出范围时,将再次调用析构函数,这将导致未定义的行为。此外,在这样的对象上做任何其他事情(如调用成员函数)也是未定义的行为。因此,您不能期望从所描述的设置中获得任何合理的行为,只是不要这样做。
https://stackoverflow.com/questions/9887000
复制相似问题