簡體   English   中英

C ++ Raii和堆棧展開

[英]C++ Raii and stack unwinding

(我將原始問題修改為更有意義)

關於返回語句,是否在返回語句之前/之后/之間銷毀了Raii對象?

例如

size_t advance() {
    boost::lock_guard<boost::mutex> lock(mutex_);
    return value_++;  // is lock destroyed after increment?
}

謝謝

給定代碼,回答修改后的問題:

return X;

X將始終在返回發生之前求值。 然后,發生的事情等效於從最上到最外的順序退出該函數的所有嵌套作用域,並在每個出口處適當調用析構函數。

您可以通過使用析構函數編寫您自己的簡單類來輕松地對此進行測試,例如

class X
   {
   public:
      ~X() { std::cout << "X::destructor" << std::endl;
   }

size_t advance()
   {
   X x;
   return value++;
   }

在X的析構函數中放置一個中斷,然后看值在那時是否已經增加。 您也可以嘗試使用/ FA(Visual Studio)進行編譯,並查看編譯器生成的程序集。

是的-它們是等效的。 增量后鎖被銷毀。 否則,后面的情況將有相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM